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

在python中如何使用列表理解来等于多个变量?,python,list-comprehension,Python,List Comprehension,假设我有以下项目 _example = namedtuple('example',['x','y']) 我收集了很多这样的例子 examples = magic_function_that_returns_a_list_of_examples() 我想替换以下两行 xs = [ e.x for e in examples] ys = [ e.y for e in examples] 与此类似的东西 xs,ys = [ [e.x,e.y] for e in examples] 更确切地说

假设我有以下项目

_example = namedtuple('example',['x','y'])
我收集了很多这样的例子

examples = magic_function_that_returns_a_list_of_examples()
我想替换以下两行

xs = [ e.x for e in examples]
ys = [ e.y for e in examples]
与此类似的东西

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

更确切地说,是否可以利用列表理解同时设置两个变量?

您只需将命名的元组列表转置并解压缩即可:

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*示例可能更好。

您可以将命名的元组列表转置并解压缩:

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*示例可能更好。

xs,ys=zip*[[e.x,e.y]代表示例中的e],这可能是其中一行solution@AI_Learning是的,我想到了,但我意识到这和zip*的例子完全一样……没错。如果namedtuple的值多于两个值,那么它可能会变得有用/更具可读性,ys=zip*[[e.x,e.y]在示例中代表e],这可能是一行中的一行solution@AI_Learning是的,我想到了,但我意识到这和zip*的例子完全一样……没错。如果namedtuple的值多于两个值,那么它可能会变得有用/更具可读性