问题:给定3个数字的列表[4, 8, 15]
生成所有可能的数字排列的列表。
这是我能收集的3*3*3 = 27
独特条目。就像是:
4,4,4
4,4,8
4,4,15
4,8,4
4,8,8
4,8,15
4,15,4
4,15,8
4,15,15
...
我尝试使用itertools.permutations
和itertools.combinations
,但我无法获得所有27个值。
例如,list(itertools.permutations([4,8,15],3))
只打印6个值:
[(4, 8, 15), (4, 15, 8), (8, 4, 15), (8, 15, 4), (15, 4, 8), (15, 8, 4)]
有没有可以开箱即用的东西,或者这更像是“滚动你自己”的问题?
你在permutations
与product
混淆:
len(list(itertools.permutations([4,8,15],3)))
# return 6
len(list(itertools.product([4,8,15], repeat=3)))
# return 27
答案仍然在itertools。名为product
的函数可以解决问题;它需要两个参数:第一个是具有可用元素的iterable,第二个是iterable可以重复自身的次数。
itertools.product([4,8,15],repeat=3)
会在你的例子中返回你想要的排列。
permutations
或combinations
不适合你的原因是因为他们不允许物品重复; product
计算笛卡尔积,允许重复项目。
此代码打印您要求的:)
list = [4,8,15]
for i in range(len(list)):
for j in range (len(list)):
for k in range (len(list)):
print ("("+str(list[i]) +","+str(list[j])+","+str(list[k])+")\n")