可以从列表理解返回两个列表?

是否有可能从列表理解返回两个列表? 那么,这显然不起作用,但像这样:

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

所以rrtt都是分别来自i*10i*12的结果的列表。 非常感谢


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

如果元素是列表,则列表理解可能返回多个列表。 例如:

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

使用zip函数的技巧可以完成这项工作,但实际上,如果您只是通过循环收集列表中的结果,那么实际上它会更加简单易读。


根据我的测试,创建两个综合列表胜(至少对于长列表)。 请注意, 最好的投票答案比传统的for循环更慢列表解析速度更快,更清晰

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

很高兴看到支持一次创建多个列表的理解列表。

链接地址: http://www.djcxy.com/p/53585.html

上一篇: Possible to return two lists from a list comprehension?

下一篇: Why does x,y = zip(*zip(a,b)) work in Python?