eag*_*arn 8 python tuples list-comprehension list
我有两个列表,并希望将它们合并到一个列表中tuples.我想这样做list comprehension,我可以使用它map.但很高兴知道这里的列表理解是如何工作的.代码在这里
>>> lst = [1,2,3,4,5]
>>> lst2 = [6,7,8,9,10]
>>> tup = map(None,lst,lst2) # works fine
>>> tup
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
>>> l3 = [lst, lst2]
>>> l3
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
>>> zip(*l3) # works fine
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
>>> [(i,j) for i in lst and for j in lst2] # does not work
File "<stdin>", line 1
[(i,j) for i in lst and for j in lst2]
^
SyntaxError: invalid syntax
>>>
Run Code Online (Sandbox Code Playgroud)
我写了评论它在哪里工作,哪里没有.如何将两者for-loop结合起来list comprehension
Rom*_*kar 13
将列表推导视为循环.你怎么写2而不是嵌套循环?
你可以用一些奇怪的列表理解来做到这一点:
[(x, lst2[i]) for i, x in enumerate(lst)]
Run Code Online (Sandbox Code Playgroud)
要么
[(lst[i], lst2[i]) for i in xrange(len(lst))]
Run Code Online (Sandbox Code Playgroud)
但实际上,最好使用它zip.
列表理解方式很愚蠢,因为它只包含一个无用的列表理解zip:
[(i,j) for i, j in zip(lst, lst2)]
Run Code Online (Sandbox Code Playgroud)
只是使用zip,这就是它的用途.强迫自己在没有完成任何事情时使用列表推导是没有意义的.
编辑:如果你的问题是"如何在一个列表理解中得到两个for循环",你应该问这个问题.答案是"你不能for在一个列表理解中获得两个PARALLEL 循环".每当你for在列表理解中放入两个子句时,它们就会被嵌套.那个,列表理解是这样的:
[... for a in list1 for b in list2]
Run Code Online (Sandbox Code Playgroud)
像两个嵌套for循环一样工作:
for a in list1:
for b in list2:
...
Run Code Online (Sandbox Code Playgroud)
你不能写一个列表理解来做到这一点:
for a in list1:
...
for b in list2:
...
Run Code Online (Sandbox Code Playgroud)
...并且您不需要,因为您具有执行此操作的zip功能.
(你可以使用像@Roman Pekar这样的解决方案来伪造它,但这并不是真的有两个for循环;它只做一个并使用那个中的值到达另一个列表.)
| 归档时间: |
|
| 查看次数: |
14095 次 |
| 最近记录: |