为了账号安全,请及时绑定邮箱和手机立即绑定

Python 循环

Python 循环

慕姐8265434 2021-11-02 20:34:04
我正在尝试创建一个程序,该程序能够获取姓名列表并创建所有可能发生的个人比赛。代码还没有完全完成。当我尝试调用该函数时,我不断收到一条错误消息说列表索引超出第 7 行的范围,也就是“for s in lst[c+1:]”。有人可以帮我解释一下,也许可以纠正一下吗?谢谢。import randomdef 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
查看完整描述

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 中生成组合”,或者类似的东西。


查看完整回答
反对 回复 2021-11-02
?
心有法竹

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


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信