是否可以从列表理解中返回两个列表?嗯,这显然不起作用,但有点像:
rr, tt = [i*10, i*12 for i in xrange(4)]
所以rr
和tt
都是分别包含i*10
和i*12
结果的列表。
非常感谢
答案 0 :(得分:55)
>>> rr,tt = zip(*[(i*10, i*12) for i in xrange(4)])
>>> rr
(0, 10, 20, 30)
>>> tt
(0, 12, 24, 36)
答案 1 :(得分:3)
根据我的测试,创建两个理解列表获胜(至少对于长列表)。请注意,最佳投票答案较慢甚至比传统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
很高兴看到理解列表支持一次创建多个列表。
答案 2 :(得分:0)
如果元素是列表,则列表推导可以返回多个列表。 例如:
>>> x, y = [[] for x in range(2)]
>>> x
[]
>>> y
[]
>>>
使用zip
函数的技巧可以完成这项工作,但如果你只是用循环收集列表中的结果,它实际上会更简单易读。