可以从列表理解返回两个列表?(Possible to return two lists from a

2019-06-24 04:57发布

是否有可能从一个列表理解返回两个列表? 那么,这显然是行不通的,但这样的:

rr, tt = [i*10, i*12 for i in xrange(4)]

所以rrtt都是与搜索结果列表,从i*10i*12分别。 非常感谢

Answer 1:

>>> rr,tt = zip(*[(i*10, i*12) for i in xrange(4)])
>>> rr
(0, 10, 20, 30)
>>> tt
(0, 12, 24, 36)


Answer 2:

根据我的测试,创建了两个内涵名单胜(至少对于长列表)。 要注意的是, 最好答案投票甚至是慢慢于传统的for循环。 List内涵是更快,更清晰

python -m timeit -n 100 -s 'rr=[];tt = [];' 'for i in range(500000): rr.append(i*10);tt.append(i*12)' 
10 loops, best of 3: 123 msec per loop

> python -m timeit -n 100 rr,tt = zip(*[(i*10, i*12) for i in range(500000)])' 
10 loops, best of 3: 170 msec per loop

> python -m timeit -n 100 'rr = [i*10 for i in range(500000)]; tt = [i*10 for i in range(500000)]' 
10 loops, best of 3: 68.5 msec per loop

这将是很好看的理解支持名单在同一时间多个列表的创建。



Answer 3:

这是可能的列表理解返回多个列表,如果该元素是列表。 因此,例如:

>>> x, y = [[] for x in range(2)]
>>> x
[]
>>> y
[]
>>>

与诀窍zip功能将做的工作,但实际上是更简单,可读,如果你只是收集列出了结果与循环。



文章来源: Possible to return two lists from a list comprehension?