list - 使用多个循环创建python列表

假设我有一个列表['A','B','C']

第二个[1 ,2 ]

我想创建一个新的列表[(A ,1),(A ,2),(B ,1)... ]

显然,使用循环可以很简单地完成:


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...]语法来实现它?

时间:

你需要两个列表的笛卡尔乘积:


>>> from itertools import product



>>> list(product(a, b))


[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]



有关详细信息,请参阅这个

查看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)]




使用python列表:


[(i, j) for i in a for j in b]



使用模块:


from itertools import product



list(product(a, b))



[x for x in...]语法有名字,它叫列表推导,你可以在[]之间编写循环,并在循环之前放置内部。


[(x, y) for x in a for y in b]




>>> [(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可能的值是先迭代的。

...