如果两个列表位于同一对象中,我可以用一个循环实例化它们吗?



如果我有两个空列表,并且我想用所有的"a";s和";b";s在同一个对象中,我可以做一些类似的事情吗:

a, b = [foo.a, foo.b for foo in foo]

因为目前我已经将它们分为两个单独的列表理解。

a = [foo.a for foo in foo]

b = [foo.b for foo in foo]

所以我想知道我是否可以以某种方式将它们整合为一条线和一个论点。

一个列表理解只能创建一个列表。您的代码是创建一个元组列表(除了元组元素需要放在括号中以防止语法错误(。

不过,您可以将其解压缩为两个列表:

a, b = zip(*[(foo.a, foo.b) for foo in foo])

请参阅如何将元组列表解压缩为单独的列表?以对此进行解释。

您总是可以用逗号将其设为一行。然而,如果将其设为一行,则会降低代码的可读性。

a, b = [foo.a for foo in foo], [foo.b for foo in foo]

你可以用一个循环来完成,但这不是一个理解

a, b = [], []
for foo in foos:
a.append(foo.a)
b.append(foo.b)

我把你的for foo in foo改成了for foo in foos,这就是我认为你的意思,否则迭代就没有什么意义了。

最新更新