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

2024-03-29 07:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有两个列表ab

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

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


Tags: 列表元组
3条回答

一个列表可以:

[(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)]

也可以使用^{}

list(itertools.product(a, b))

如果您有多个列表,或者列表的数量可变,这将非常有用。你知道吗

例如:

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

相关问题 更多 >