Python 将字符串从一个列表移动到另一个列表

Python 将字符串从一个列表移动到另一个列表,python,list,Python,List,每当我运行程序时,它都会出现以下两种错误 Traceback (most recent call last): File "C:\Users\mrosales\Downloads\Rock Paper Sissor Tornament.py", line 46, in <module> Temp = ClassList[Random2] IndexError: list index out of range Traceback (most recent call las

每当我运行程序时,它都会出现以下两种错误

Traceback (most recent call last):
  File "C:\Users\mrosales\Downloads\Rock Paper Sissor Tornament.py", line 46, in <module>
    Temp = ClassList[Random2]
IndexError: list index out of range

Traceback (most recent call last):
  File "C:\Users\mrosales\Downloads\Rock Paper Sissor Tornament.py", line 60, in <module>
    Temp = ClassList[Random2]
IndexError: list index out of range

任何人都能发现我可能犯下的错误,如果他们愿意的话,纠正它吗?

从我收集的信息来看,您的代码正试图做到这一点,我相信下面的代码将实现这一点。它有点短,但基本上与你在没有崩溃的情况下所做的一样

import random

ClassList = ['Noah', 'Simone', 'Ji Ho', 'Thanh', 'Nathanial', 'Soo', 'Mickel', 'Tuan']

# Randomise list order
random.shuffle(ClassList)

# Remove last 2 elements from list and add to new match lists
Match1 = [ClassList.pop(), ClassList.pop()]
Match2 = [ClassList.pop(), ClassList.pop()]
Match3 = [ClassList.pop(), ClassList.pop()]
Match4 = [ClassList.pop(), ClassList.pop()]

print(Match1, Match2, Match3, Match4)

请注意,如果您多次运行此程序,您将看到它确实提供了不同的“匹配装置”。

根据我收集的您的代码试图执行的操作,我相信下面的代码将实现它。它有点短,但基本上与你在没有崩溃的情况下所做的一样

import random

ClassList = ['Noah', 'Simone', 'Ji Ho', 'Thanh', 'Nathanial', 'Soo', 'Mickel', 'Tuan']

# Randomise list order
random.shuffle(ClassList)

# Remove last 2 elements from list and add to new match lists
Match1 = [ClassList.pop(), ClassList.pop()]
Match2 = [ClassList.pop(), ClassList.pop()]
Match3 = [ClassList.pop(), ClassList.pop()]
Match4 = [ClassList.pop(), ClassList.pop()]

print(Match1, Match2, Match3, Match4)
注意,如果您多次运行此选项,您将看到它确实提供了不同的“匹配装置”。

解决方案1:
del ClassList[Random1]
在第二次
Temp
赋值之后

解决方案2:
Random2=random.randrange(0,len(ClassList)-1)
将解决您的问题,然后您就不需要
Random1!=随机2
在您的情况下

更重要的是:
你应该清理你的代码

temp = classList.pop(random1)
相当于

temp = classList[random1]
del classList[random1]
使用函数处理重复代码:

def get_random():
    random_index = random.randrange(0,len(classList))
    return classList.pop(random_index)

match1 = [get_ramdom(), get_random()]
根据

解决方案1:
del ClassList[Random1]
在第二次
Temp
赋值之后

解决方案2:
Random2=random.randrange(0,len(ClassList)-1)
将解决您的问题,然后您就不需要
Random1!=随机2
在您的情况下

更重要的是:
你应该清理你的代码

temp = classList.pop(random1)
相当于

temp = classList[random1]
del classList[random1]
使用函数处理重复代码:

def get_random():
    random_index = random.randrange(0,len(classList))
    return classList.pop(random_index)

match1 = [get_ramdom(), get_random()]

不要使用大写的变量名,因为您在迭代类列表时正在修改它。当它抛出错误时,您的类中没有人可以选择len(ClassList)0

如果我理解你想做什么,你可以创建另一个列表,并在遍历原始列表时向其添加名称,以跟踪匹配的对象。或者最好使用random.shuffle

import random
import time
classlist = ['Noah','Simone','Ji Ho','Thanh','Nathanial','Soo','Mickel','Tuan']
from random import shuffle

def get_random( classlist ):
  shuffle( classlist )
  while classlist:
    yield classlist.pop()

matches = []
match = []

for player in get_random(classlist):
    if len(match) <= 1:
        #print "Adding %s" %player
        match.append(player)
        if len(match) == 2:
            matches.append(match)
            #print "Match %s is full" %len(matches)
            match = []

for x in range(0,len(matches)):
    print "Match %s: %s" %(x,matches[x])
随机导入
导入时间
classlist=['Noah','Simone','Ji Ho','than','Nathanial','Soo','Mickel','Tuan']
从随机导入洗牌
def get_random(类列表):
洗牌(类列表)
而类列表:
yield classlist.pop()
匹配项=[]
匹配=[]
对于get_random(类列表)中的玩家:

如果len(match)您在迭代类列表时正在修改它。当它抛出错误时,您的类中没有人可以选择len(ClassList)0

如果我理解你想做什么,你可以创建另一个列表,并在遍历原始列表时向其添加名称,以跟踪匹配的对象。或者最好使用random.shuffle

import random
import time
classlist = ['Noah','Simone','Ji Ho','Thanh','Nathanial','Soo','Mickel','Tuan']
from random import shuffle

def get_random( classlist ):
  shuffle( classlist )
  while classlist:
    yield classlist.pop()

matches = []
match = []

for player in get_random(classlist):
    if len(match) <= 1:
        #print "Adding %s" %player
        match.append(player)
        if len(match) == 2:
            matches.append(match)
            #print "Match %s is full" %len(matches)
            match = []

for x in range(0,len(matches)):
    print "Match %s: %s" %(x,matches[x])
随机导入
导入时间
classlist=['Noah','Simone','Ji Ho','than','Nathanial','Soo','Mickel','Tuan']
从随机导入洗牌
def get_random(类列表):
洗牌(类列表)
而类列表:
yield classlist.pop()
匹配项=[]
匹配=[]
对于get_random(类列表)中的玩家:

如果len(匹配)发布了完整的回溯?哪一行导致了错误?您是否尝试过插入一些断点并逐步通过?你可能会找到问题所在。@ZdaR这是一个很长的代码,如果我编辑我的文章并输入完整的代码,它将填充不止一个屏幕页面。。。你确定吗?我不介意,只要你没有明显的停止点。如果让我猜的话,发生的事情是类列表清空了,而随机数仍然产生0——然后尝试查找空列表的索引0,然后单击kablooie。(只是一个猜测,我不完全确定尝试访问空列表的索引0会做什么)。如果我的猜测是对的,那就在一段时间内把整个事情都包装好吧,len(classlist)!=0块就可以了。(编辑:没关系,那不行。喵。)@RedShift你能解释一下断点是什么吗?最好举个例子来说明完整的回溯?哪一行导致了错误?您是否尝试过插入一些断点并逐步通过?你可能会找到问题所在。@ZdaR这是一个很长的代码,如果我编辑我的文章并输入完整的代码,它将填充不止一个屏幕页面。。。你确定吗?我不介意,只要你没有明显的停止点。如果让我猜的话,发生的事情是类列表清空了,而随机数仍然产生0——然后尝试查找空列表的索引0,然后单击kablooie。(只是一个猜测,我不完全确定尝试访问空列表的索引0会做什么)。如果我的猜测是对的,那就在一段时间内把整个事情都包装好吧,len(classlist)!=0块就可以了。(编辑:没关系,那不行。喵。)@RedShift你能解释一下断点是什么吗?最好举个例子,这并不能解决问题。出现这些问题的原因是“del”关键字及其更改的列表长度。反过来,允许一度有效的索引位置变为无效。@RedShift make
len(ClassList)-1
将修复随机数以匹配新的列表长度。但这并不能解决问题。出现这些问题的原因是“del”关键字及其更改的列表长度。反过来,允许曾经有效的索引位置变为无效。@RedShift make
len(ClassList)-1
将修复随机数以匹配新的列表长度
Match1,Match2,Match3,Match4=zip(ClassList[::2],ClassList[1::2])
是的,这很像pythonic,我只是选择了更长更简单的方法。
Match1,Match2,Match3,Match4=zip(ClassList[::2],ClassList[1::2])
是的,这很像python,我只是选择了更长更简单的方法。