假设我们有两个列表a
和b
:给定长度M和N的清单,如何得到的长度M * N的列表,包括所有可能的对
a = [1, 2]
b = [3, 4]
是否有一个快速的操作,将返回元组列表[(1,3), (1,4), (2,3), (2,4)]
?
假设我们有两个列表a
和b
:给定长度M和N的清单,如何得到的长度M * N的列表,包括所有可能的对
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)]
您还可以使用itertools.product
:
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)]
功能itertools.product()
将这样的伎俩:
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 – Julien