例如,我的代码如下:
a = [1, 2]
b = [4, 5]
我怎样才能得到这样的东西:
[(1,4), (1,5), (2,4), (2,5)]
与函数zip
类似,但具有所有可能的变体。或者不是吗?
答案 0 :(得分:35)
你想要itertools.product:
>>> import itertools
>>> a = [1,2]
>>> b = [4,5]
>>> list(itertools.product(a,b))
[(1, 4), (1, 5), (2, 4), (2, 5)]
答案 1 :(得分:9)
如果您只对结果感兴趣,那么itertools.product
就是您所需要的(@DSM为+1)。但是,如果您对生成此类内容的算法感兴趣,则称其为recursive descent。在这种情况下,算法将按如下方式运行(为了清楚起见,我将在此处打印结果):
def product(L, tmp=None):
if tmp is None:
tmp = []
if L==[]:
print tmp
else:
for i in L[0]:
product(L[1:], tmp+[i])
因此,
>>> product([[1,2], [4,5]])
[1, 4]
[1, 5]
[2, 4]
[2, 5]
希望这有帮助
答案 2 :(得分:5)
你可以很好地使用列表理解,或者更好地使用生成器表达式,如果你只需要遍历组合。
这是使用列表理解:
a = [1, 2]
b = [4, 5]
[(i, j) for i in a for j in b]
这里有一个生成器表达式:
for pair in ((i, j) for i in a for j in b):
print(pair)
答案 3 :(得分:4)
不要忽视显而易见的事实:
self, args = args[0], args[1:] # allow the "self" keyword be passed
或列表推导:
out = []
for a in [1, 2]:
for b in [4, 5]:
out.append((a, b))
两者都产生a = [1, 2]
b = [4, 5]
out = [(x, y) for x in a for y in b]