让我说一个清单['A','B','C']
和第二个[1,2]
我想创建一个新列表[(A,1),(A,2),(B,1)...]
显然,可以使用如下所示的for循环轻松完成此操作:
a = ['A','B','C']
b = [1,2]
c = []
for x in a:
for y in b:
c.append((x,y))
c
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]
但是如何使用[x for x in ...]语法呢?
答案 0 :(得分:4)
您需要两个列表中的笛卡尔积:
>>> from itertools import product
>>> list(product(a, b))
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]
与显式列表理解不同,它可以轻松地扩展到任意数量的输入可迭代对象。有关详细信息,请参见here。
答案 1 :(得分:3)
看看itertools.product
:
>>> from itertools import product
>>> a = [ 'A', 'B', 'C' ]
>>> b = [ 1, 2]
>>> [ x for x in product(a, b) ]
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]
答案 2 :(得分:2)
使用python列表:
[(i, j) for i in a for j in b]
使用模块:
from itertools import product
list(product(a, b))
答案 3 :(得分:2)
[x for x in...]
语法有名称,称为列表理解,您可以在[
和]
之间编写循环,并在循环之前放入最内层。
[(x, y) for x in a for y in b]
答案 4 :(得分:1)
在您的情况下,list comprehensions版本可能是:
>>> [(x, y) for x in "ABC" for y in [1,2]]
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]
请注意,顺序很重要,即对于固定的x='A'
,首先会迭代y
的可能值。