从列表中删除随机项时出错

时间:2017-03-13 14:39:40

标签: python list random

当我尝试运行时会出现错误:

ValueError:list.remove(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()

3 个答案:

答案 0 :(得分:1)

等到你得到一个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))

答案 1 :(得分:1)

所以,我认为这里的问题有两个方面。 (1)在删除几个项目后,您生成的随机数大于当前列表;(2)python列表为零。

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

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

这应该保证随机数在列表中并且应该可用。

对于第二个问题,需要考虑零位置(阵列上的第一个位置)。因此,如果python列表中有10个位置,那些位置的索引将是0到9,而不是1到10.因此,当您尝试删除位置10时,它不存在。在0处启动随机数生成器(如上所示),并以小于长度的一个结束它。这应该涵盖清单中所有可能的位置。

希望这有帮助。

答案 2 :(得分:0)

您不能两次删除一个项目。它不存在。

Meybe使用尝试:除了:声明。