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

时间:2012-05-07 08:59:33

标签: python list-comprehension

是否可以从列表理解中返回两个列表?嗯,这显然不起作用,但有点像:

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

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

3 个答案:

答案 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函数的技巧可以完成这项工作,但如果你只是用循环收集列表中的结果,它实际上会更简单易读。