如何使用列表理解等于python中的多个变量?

时间:2019-02-13 04:44:05

标签: python list-comprehension

假设我有以下物品

_example = namedtuple('example',['x','y'])

我收集了很多这样的例子

examples = magic_function_that_returns_a_list_of_examples()

我要替换以下2行

xs = [ e.x for e in examples]
ys = [ e.y for e in examples]

类似于此...

xs,ys  = [ [e.x,e.y] for e in examples]

用更好的话来说,是否可以利用列表理解一次设置两个变量?

1 个答案:

答案 0 :(得分:5)

您可以转置namedtuple的列表并将其解压缩:

xs, ys = zip(*examples)

例如:

from collections import namedtuple

example = namedtuple('example',['x','y'])
examples = [example(i, j) for i in range(5) for j in range(5)]

xs, ys = zip(*examples)
print(xs)
print(ys)

输出:

(0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4)
(0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4)

任何带有列表理解的解决方案都是不必要的麻烦,最好用您给出的两个列表理解来代替。如果您想一行完成,列表解析最清晰,最易读的方式就是

xs, ys = [e.x for e in examples], [e.y for e in examples]

但是,我认为zip(*examples)可能还是更好。