繁体   English   中英

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

[英]How to use list comprehention to equal to more than one variable in python?

假设我有以下物品

_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]

换句话说,是否可以利用列表理解一次设置两个变量?

您可以转置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)可能更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM