索引器:无法从emty序列中选择

2024-04-28 05:31:29 发布

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

我试图从列表中获取随机数,但这些数字只允许从随机选择的第一个数字开始上升。它在第一次循环时工作正常,但在第二次循环时会出现以下错误:

Traceback (most recent call last): Num = random.choice(listNum)

以及:

raise IndexError('Cannot choose from an empty sequence')

这是我使用的代码:

import random

listNum = list(range(100))

for n in range(100):
    Num = random.choice(listNum)
    print(Num)
    del listNum[0:Num]
    print(listNum)

Tags: most列表错误range数字randomcallnum
2条回答

当你这样做的时候

del listNum[0:Num]

删除索引Num之前的所有元素,但在第一个循环之后,它没有完全按照您的要求执行操作,因为它不删除Num之前的元素,而是删除Num元素,您需要的是:

del listNum[0:listNum.index(Num)]

您应该添加try{},它将捕获索引错误,并执行有助于解决该错误的操作

for n in range(100):
    try:
        Num = random.choice(listNum)
        print(Num)
        del listNum[0:Num]
        print(listNum)
    except IndexError:  # this will handle only IndexError, don't use pure except
        break  # stop loop when there are no more numbers

其他一些更聪明的解决方案是:

while len(listNum):
   # do same stuff here
   # print number only when list has at least 1 element

另外,请记住,您的列表越来越小,因此您不能只del [0: Num]

相关问题 更多 >