2 回答
TA贡献1833条经验 获得超4个赞
标准库itertools模块有一个名为的函数combinations() ,可以执行您的请求(从可迭代对象生成所有可能的项目组合的列表)。但是,如果您正在寻找排列,即 if(A,B)应该被视为与 不同(B,A),那么您将需要使用permutations().
例如,运行以下代码:
from itertools import permutations, combinations
names = ['Jeff', 'Alice', 'Trogdor', 'Kublai Khan']
print("Combinations: ", [n for n in combinations(names, 2)])
print("Permutations: ", [n for n in permutations(names, 2)])
...将打印以下输出:
Combinations: [('Jeff', 'Alice'), ('Jeff', 'Trogdor'), ('Jeff', 'Kublai Khan'), ('Alice', 'Trogdor'), ('Alice', 'Kublai Khan'), ('Trogdor', 'Kublai Khan')]
Permutations: [('Jeff', 'Alice'), ('Jeff', 'Trogdor'), ('Jeff', 'Kublai Khan'), ('Alice', 'Jeff'), ('Alice', 'Trogdor'), ('Alice', 'Kublai Khan'), ('Trogdor', 'Jeff'), ('Trogdor', 'Alice'), ('Trogdor', 'Kublai Khan'), ('Kublai Khan', 'Jeff'), ('Kublai Khan', 'Alice'), ('Kublai Khan', 'Trogdor')]
附带说明一下,碰巧还有一个使用 itertools 函数islice()和cycle(). 但术语“循环”并不能准确地描述您正在尝试做什么。您的问题的更好标题是“在 python 中生成组合”,或者类似的东西。
TA贡献1866条经验 获得超5个赞
让我们看看你的代码:
import random
def pairShuffling(*names):
lst = list(names) # maximum allowed index for lst[idx]` will be in range 0..len(names)-1
lst2=[]
for c in range(len(names)): # `c` will be in range[0..len(names)-1]
if lst[c]!=lst[-1]:
for s in lst[c+1:]: # you overexceeding maximum allowed value for index
lst2 += [lst[c],lst[s]]
return lst2
我想你需要使用itertools.permutations或itertools.combinations/itertools.combinations_with_replacement
添加回答
举报