[英]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.