【发布时间】:2018-01-23 06:57:55
【问题描述】:
给定一个列表,我可以得到列表中每个项目的乘积:
from itertools import product
x = 'apple orange pair None'.split()
[i + ' ' + j for i, j in product(x, x)]
[出]:
['apple apple',
'apple orange',
'apple pair',
'apple None',
'orange apple',
'orange orange',
'orange pair',
'orange None',
'pair apple',
'pair orange',
'pair pair',
'pair None',
'None apple',
'None orange',
'None pair',
'None None']
如果我想将product(list, list) 的输出与初始列表嵌套,我可以这样做:
from itertools import product
x = 'apple orange pair None'.split()
for i, j in product(x, x):
i = '' if i == 'None' else i
j = '' if j == 'None' else j
y = i + ' ' + j
y = y.strip()
print(y)
for k, l in product(x, [y]):
k = '' if k == 'None' else k
l = '' if l == 'None' else l
z = k + ' ' + l
z = z.strip()
print(z)
[出]:
apple apple
apple apple apple
orange apple apple
pair apple apple
apple apple
apple orange
apple apple orange
orange apple orange
pair apple orange
apple orange
apple pair
apple apple pair
orange apple pair
pair apple pair
apple pair
apple
apple apple
orange apple
pair apple
apple
orange apple
apple orange apple
orange orange apple
pair orange apple
orange apple
orange orange
apple orange orange
orange orange orange
pair orange orange
orange orange
orange pair
apple orange pair
orange orange pair
pair orange pair
orange pair
orange
apple orange
orange orange
pair orange
orange
pair apple
apple pair apple
orange pair apple
pair pair apple
pair apple
pair orange
apple pair orange
orange pair orange
pair pair orange
pair orange
pair pair
apple pair pair
orange pair pair
pair pair pair
pair pair
pair
apple pair
orange pair
pair pair
pair
apple
apple apple
orange apple
pair apple
apple
orange
apple orange
orange orange
pair orange
orange
pair
apple pair
orange pair
pair pair
pair
apple
orange
pair
如果我想达到另一个层次的嵌套,我可以硬编码:
from itertools import product
x = 'apple orange pair None'.split()
for i, j in product(x, x):
i = '' if i == 'None' else i
j = '' if j == 'None' else j
y = i + ' ' + j
y = y.strip()
print(y)
for k, l in product(x, [y]):
k = '' if k == 'None' else k
l = '' if l == 'None' else l
z = k + ' ' + l
z = z.strip()
print(z)
for m, n in product(x, [z]):
m = '' if m == 'None' else m
n = '' if n == 'None' else n
zz = m + ' ' + n
zz = zz.strip()
print(zz)
但是有没有其他方法可以在不进行硬编码的情况下实现相同的输出?
【问题讨论】:
-
我真的不明白你在后面的例子中得到了什么。例如,您的第二个示例多次包含“apple apple”。那是你要的吗?为什么将“无”放在原始列表中,然后又将其取出?你为什么要加入带有空格的项目,然后再取出空格? “将 product(list, list) 的输出与初始列表嵌套”是什么意思?对
k的各种值执行itertools.product(original_list, repeat=k)无法实现您想要什么? -
啊,
repeat正是我要找的东西!! -
更准确地说,我试图得到
product(x, repeat=1) + product(x, repeat=2) + product(x, repeat=3)=)
标签: python list nested product itertools