如何优雅的只遍历一次 list 来生成多个衍生 list

class Something:
  def __init__(self, a, b):
    self.a = a
    self.b = b


somethings = [Something(i, i * i) for i in range(10)]

# 有没有办法仅遍历一次 somethings,并优雅的生成下面两个 list
a_s = [something.a for something in somethings]
b_s = [something.b for something in somethings]

print a_s
print b_s
阅读 3.8k
4 个回答
a_s, b_s = zip(*map(lambda sth: (sth.a, sth.b), somethings))

不用列表解析很好实现,优雅的要求好像达不到。

a_s, b_s =[],[]
for something in somethings:
    a_s.append(something.a)
    b_s.append(something.b) 
a_s, b_s = [], []
[(a_s.append(something.a), b_s.append(something.b)) for something in somethings]
from numpy import array
a_s, b_s = numpy.array([(something.a,something.b) for something in somethings]).T
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题