Python 给定长度为M和N的列表,如何获得具有所有可能对的长度为M*N的列表

Python 给定长度为M和N的列表,如何获得具有所有可能对的长度为M*N的列表,python,Python,假设我们有两个列表a和b: a = [1, 2] b = [3, 4] 是否有一个快速操作将返回元组列表[(1,3)、(1,4)、(2,3)、(2,4)]?列表理解是否: [(i,j) for i in a for j in b] 输出: >>> a = [1, 2] >>> b = [3, 4] >>> [(i,j) for i in a for j in b] [(1, 3), (1, 4), (2, 3), (2, 4)] 一个

假设我们有两个列表
a
b

a = [1, 2]
b = [3, 4]

是否有一个快速操作将返回元组列表
[(1,3)、(1,4)、(2,3)、(2,4)]

列表理解是否:

[(i,j) for i in a for j in b]
输出:

>>> a = [1, 2]
>>> b = [3, 4]
>>> [(i,j)  for i in a for j in b]
[(1, 3), (1, 4), (2, 3), (2, 4)]

一个列表可以:

[(i,j) for i in a for j in b]
输出:

>>> a = [1, 2]
>>> b = [3, 4]
>>> [(i,j)  for i in a for j in b]
[(1, 3), (1, 4), (2, 3), (2, 4)]
您还可以使用:

如果您有多个列表,或列表数量可变,则此选项非常有用

例如:

>>> import itertools
>>> a = [1, 2]
>>> b = [3, 4]
>>> c = [5, 6]
>>> list(itertools.product(a, b, c))
[(1, 3, 5), (1, 3, 6), (1, 4, 5), (1, 4, 6), (2, 3, 5), (2, 3, 6), (2, 4, 5), (2, 4, 6)]
您还可以使用:

如果您有多个列表,或列表数量可变,则此选项非常有用

例如:

>>> import itertools
>>> a = [1, 2]
>>> b = [3, 4]
>>> c = [5, 6]
>>> list(itertools.product(a, b, c))
[(1, 3, 5), (1, 3, 6), (1, 4, 5), (1, 4, 6), (2, 3, 5), (2, 3, 6), (2, 4, 5), (2, 4, 6)]
该函数将执行以下操作:

In [41]: a, b = [1, 2], [3, 4]

In [42]: from itertools import product

In [43]: list(product(a, b))
Out[43]: [(1, 3), (1, 4), (2, 3), (2, 4)]
需要指出的是,您需要调用内置函数
list()
,将
product
返回的迭代器转换为列表

作为旁注,如果您的目标是计算列表本身的乘积,您可能会发现使用可选的
repeat
关键字参数非常方便:

In [46]: list(product(a, repeat=3))
Out[46]: 
[(1, 1, 1),
 (1, 1, 2),
 (1, 2, 1),
 (1, 2, 2),
 (2, 1, 1),
 (2, 1, 2),
 (2, 2, 1),
 (2, 2, 2)]
该函数将执行以下操作:

In [41]: a, b = [1, 2], [3, 4]

In [42]: from itertools import product

In [43]: list(product(a, b))
Out[43]: [(1, 3), (1, 4), (2, 3), (2, 4)]
需要指出的是,您需要调用内置函数
list()
,将
product
返回的迭代器转换为列表

作为旁注,如果您的目标是计算列表本身的乘积,您可能会发现使用可选的
repeat
关键字参数非常方便:

In [46]: list(product(a, repeat=3))
Out[46]: 
[(1, 1, 1),
 (1, 1, 2),
 (1, 2, 1),
 (1, 2, 2),
 (2, 1, 1),
 (2, 1, 2),
 (2, 2, 1),
 (2, 2, 2)]

查找itertools.product查找itertools.product