Python循环

Python循环,python,python-3.6,Python,Python 3.6,我正在尝试创建一个程序,它能够获取一个姓名列表,并创建所有可能发生的个人匹配 代码还没有完全完成 当我试图调用函数时,总是收到一条错误消息 列表索引超出第7行的范围,即lst[c+1:]中s的范围 有人能帮我解释一下,也许能纠正一下吗 谢谢 import random def pairShuffling(*names): lst = list(names) lst2=[] for c in range(len(names)): if lst[c]!=lst

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

代码还没有完全完成

当我试图调用函数时,总是收到一条错误消息

列表索引超出第7行的范围,即lst[c+1:]中s的范围

有人能帮我解释一下,也许能纠正一下吗

谢谢

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
“标准库”模块有一个名为“组合”的函数,它执行您所请求的操作,从iterable生成所有可能的项目组合的列表。如果你在寻找置换,也就是说,如果A,B应该被视为不同于B,A,那么你会想要使用置换

例如,运行以下代码:

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')]
另一方面,在一组iterables中循环循环循环,每次从每个iterables中抽取一个,直到使用itertools函数islice和cycle将其耗尽。但是循环赛这个词并不能准确地描述你想要做什么。对于您的问题,更好的标题应该是用python生成组合,或者类似的东西。

标准库模块有一个名为combines的函数,它可以根据您的请求,从iterable生成所有可能的项目组合的列表。如果你在寻找置换,也就是说,如果A,B应该被视为不同于B,A,那么你会想要使用置换

例如,运行以下代码:

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')]

另一方面,在一组iterables中循环循环循环,每次从每个iterables中抽取一个,直到使用itertools函数islice和cycle将其耗尽。但是循环赛这个词并不能准确地描述你想要做什么。对于您的问题,更好的标题应该是用python生成组合,或者类似的东西。

让我们看看您的代码:

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.combinations/itertools.combinations\u替换

让我们看看您的代码:

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.combinations/itertools.combinations\u替换

注意索引从0开始。如果有4个名称,那么lst的长度为4。所以c是0,1,2,3。因此c+1可以变为4,并且lst[4]超出范围。@LoMaPh否,因为他们正在检查lst[c]!=lst[-1],因此如果它不是最后一个对象,那么它将使用下一个对象。很明显,如果它们不是重复的,但我想它们是重复的not@Fukiyel但是,在lst[s]中,s确实超出了索引。请注意,索引从0开始。如果有4个名称,那么lst的长度为4。所以c是0,1,2,3。因此c+1可以变为4,并且lst[4]超出范围。@LoMaPh否,因为他们正在检查lst[c]!=lst[-1],因此如果它不是最后一个对象,那么它将使用下一个对象。很明显,如果它们不是重复的,但我想它们是重复的not@Fukiyel但是,在lst[s]中,s确实超出了索引。我添加了一个代码示例。希望你不介意;如果需要,请随时回复。本-谢谢!实际上,当你编辑时,我自己正在添加一个,所以我继续添加了它。我添加了一个代码示例。希望你不介意;如果需要,请随时回复。本-谢谢!你编辑的时候,我自己正在添加一个,所以我继续添加了它。