Ant*_*ton 1 python list-comprehension
假设我有以下项目
_example = namedtuple('example',['x','y'])
Run Code Online (Sandbox Code Playgroud)
我收集了一堆这样的例子
examples = magic_function_that_returns_a_list_of_examples()
Run Code Online (Sandbox Code Playgroud)
我想替换以下2行
xs = [ e.x for e in examples]
ys = [ e.y for e in examples]
Run Code Online (Sandbox Code Playgroud)
对于某些事情......
xs,ys = [ [e.x,e.y] for e in examples]
Run Code Online (Sandbox Code Playgroud)
换句话说,是否有可能利用列表推导来一次设置两个变量?
您只需转置namedtuple
s 列表并将其解压缩:
xs, ys = zip(*examples)
Run Code Online (Sandbox Code Playgroud)
例如:
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)
Run Code Online (Sandbox Code Playgroud)
输出:
(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)
Run Code Online (Sandbox Code Playgroud)
任何具有列表推导的解决方案都会被不必要地复杂化,最好用你给出的两个列表推导来代替.如果你想在一行中完成,那么列表推导的最清晰,最易读的方法是
xs, ys = [e.x for e in examples], [e.y for e in examples]
Run Code Online (Sandbox Code Playgroud)
但是,zip(*examples)
在我看来,可能还是更好.
归档时间: |
|
查看次数: |
40 次 |
最近记录: |