从lis中删除随机项时出错

2024-09-18 18:39:54 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试着运行这个程序时,出现了一个错误:

值错误:列表.删除(x) :x不在列表中

然而,这种错误并不总是发生。我认为这是因为只有当返回的随机数已经被删除,但我不确定或如何修复它时才会发生。非常感谢大家的帮助。你知道吗

def main():
    numbers = [1,2,3,4,5,6,7,8,9,10,]
    count = 0

    while count <= 3:  #how many numbers to remove
        count += 1
        remove(numbers)

print (numbers)
done = input ("Enter to exit.")

def remove(numbers):

    import random
    randnum = random.randint(1,10)
    numbers.remove(int(randnum))


main()

Tags: to程序列表maindefcount错误random
3条回答

所以,我认为问题有两个方面。(1) 删除一些项目后,生成的随机数大于当前列表,并且(2)python列表是基于零的。你知道吗

因此,对于第一个问题,如果您之前已经删除了2项,并且随机数生成器创建了9,那么9位置将不再存在。因此,您需要根据列表的当前长度生成随机数:

randnum = random.randint(0,len(numbers) -1)

这应该保证随机数在列表中并且应该是可用的。你知道吗

对于第二个问题,需要考虑零位置(数组上的第一个位置)。因此,如果在python列表中有10个位置,那么这些位置的索引将是0到9,而不是1到10。因此,当你试图删除位置10,它不存在。在0处启动随机数生成器(如上所示),并在长度小于1处结束它。这应该包括名单上所有可能的职位。你知道吗

希望这有帮助。你知道吗

一个项目不能删除两次。它不存在。你知道吗

请使用Try:except:statement。你知道吗

等到您得到一个在列表中in的数字:

def remove(numbers):
    import random
    randnum = random.randint(1, 10)
    while randnum not in numbers:
        randnum = random.randint(1, 10)
    numbers.remove(randnum)

您还可以使用random.choice(谢谢@WillemVanOnsem)并选择您知道存在的元素:

def remove(numbers):
    import random
    numbers.remove(random.choice(numbers))

相关问题 更多 >