猿问

Python 循环

我正在尝试创建一个程序,该程序能够获取姓名列表并创建所有可能发生的个人比赛。


代码还没有完全完成。


当我尝试调用该函数时,我不断收到一条错误消息说


列表索引超出第 7 行的范围,也就是“for s in lst[c+1:]”。


有人可以帮我解释一下,也许可以纠正一下吗?


谢谢。


import random

def pairShuffling(*names):

    lst = list(names)

    lst2=[]

    for c in range(len(names)):

        if lst[c]!=lst[-1]:

            for s in lst[c+1:]:

                lst2 += [lst[c],lst[s]]

    return lst2


慕姐8265434
浏览 160回答 2
2回答

潇潇雨雨

标准库itertools模块有一个名为的函数combinations() ,可以执行您的请求(从可迭代对象生成所有可能的项目组合的列表)。但是,如果您正在寻找排列,即 if(A,B)应该被视为与 不同(B,A),那么您将需要使用permutations().例如,运行以下代码:from itertools import permutations, combinationsnames = ['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 中生成组合”,或者类似的东西。

心有法竹

让我们看看你的代码:import randomdef 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
随时随地看视频慕课网APP

相关分类

Python
我要回答