带有多个循环的Python列表创建

时间:2019-05-29 08:18:15

标签: python list

让我说一个清单['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 ...]语法呢?

5 个答案:

答案 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的可能值。