如何在python中使用列表理解从列表中获取元组

如何在python中使用列表理解从列表中获取元组,python,list,tuples,list-comprehension,Python,List,Tuples,List Comprehension,我有两个列表,希望将它们合并到一个元组列表中。我想使用列表理解,我可以使用映射使其工作。但是如果知道列表理解在这里是如何工作的,那就太好了。 代码在这里 >>> 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)

我有两个列表,希望将它们合并到一个元组列表中。我想使用
列表理解
,我可以使用
映射
使其工作。但是如果知道列表理解在这里是如何工作的,那就太好了。 代码在这里

>>> 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
>>> 
>lst=[1,2,3,4,5]
>>>lst2=[6,7,8,9,10]
>>>tup=map(无、lst、lst2)#工作正常
>>>塔普
[(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)#工作正常
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
>>>[(i,j)对于lst中的i和lst2中的j]#不起作用
文件“”,第1行
[(i,j)表示lst中的i和lst2中的j]
^
SyntaxError:无效语法
>>> 

我已经写了一些评论,在哪里有效,在哪里无效。两个
for循环
如何在
列表理解

中耦合?列表理解方式很愚蠢,因为它只是将一个什么都不做的列表理解包装在
zip
周围:

[(i,j) for i, j in zip(lst, lst2)]
只要使用
zip
,这就是它的用途。当列表理解不能完成任何事情时,强迫自己使用列表理解是没有意义的

编辑:如果你的问题是“如何在一个列表中获得两个for循环”,你应该问这个问题。答案是“在一个列表中,对于循环,您无法获得两个并行的
”。每当您在列表中放置两个
for
子句时,它们都将被嵌套。这样的一个列表:

[... for a in list1 for b in list2]
与两个嵌套的
循环类似:

for a in list1:
    for b in list2:
        ...
您不能编写这样的列表:

for a in list1:
    ...
for b in list2:
    ...
。您不需要这样做,因为您可以使用
zip
函数来实现这一点


(你可以使用@Roman Pekar这样的解决方案来假装它,但这并不能真正为
循环做两个
;它只做一个,并使用其中一个的值进入另一个列表。)

将列表理解看作循环。如何编写2个非嵌套循环

您可以通过对列表的理解来做到这一点:

[(x, lst2[i]) for i, x in enumerate(lst)]


但实际上,最好使用
zip

这相当于使用zip(lst,lst2)。没有必要在zip(lst,lst2)中对i,j使用[(i,j)]>>
zip(lst,lst2)[(1,6)、(2,7)、(3,8)、(4,9)、(5,10)]>>[(i,j)在zip(lst,lst2)中对i,j使用[(1,6)、(2,7)、(3,8)、(4,9)、(5,10)]
我希望在不使用
zip的情况下实现这一点possible@user2708477为什么你不想使用zip?@RomanPekar:正如我的问题所说,我想使用列表理解,只是因为我想看看如何在列表理解中获得两个for循环,我确实知道zip是如何工作的,而且使用起来相当简单zip@user2708477在我看来,列表理解基本上是循环的简写。如何编写2个非嵌套循环?@user2708477:请参阅我编辑的答案。答案是你不能在一个列表理解中得到两个非嵌套循环。很好的解决方案,我想知道是否以及如何在列表理解中得到两个for循环
[(lst[i], lst2[i]) for i in xrange(len(lst))]