【问题标题】:What is causing the message "IndexError: list index out of range"?是什么导致消息“IndexError:列表索引超出范围”?
【发布时间】:2021-06-24 23:39:59
【问题描述】:

我对 python 很满意,但我不知道为什么由于我的代码而出现此错误:

import random
inp = input('Enter: ')
inp = str(inp)
char = 0
key = []
list = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%&*?+-')

if inp == 'New':
    while char < len(list):
        rand = random.randint(0, len(list))
        key.append(list[rand])
        char = char + 1
print(key)

代码不会总是打印列表“键”,而是给我错误“IndexError:列表索引超出范围”。我该如何解决这个问题?

【问题讨论】:

    标签: python list random


    【解决方案1】:

    randint 是包容性的,所以它会在随机值中包含列表长度的实际值,这会导致超出范围的索引。例如,如果您有一个长度为 8 的列表,它可以为您提供值 8,即使您拥有的最大索引只能是 7。

    要修复,您只需要使用:

    rand = random.randint(0, len(list) - 1)
    

    编辑:

    正如@DeepSpace 提到的,你也可以使用random.choice(list)。并且尽量避免使用内置的list作为变量名。

    【讨论】:

    • 虽然技术上是正确的,但您可以添加 OP 可以简单地使用 random.choice(list),并且在使用时,使用内置 list 以外的其他名称。
    • 哦,我没有意识到这一点。这是有道理的,因为列表从 0 开始。谢谢!
    猜你喜欢
    • 2018-07-23
    • 2011-10-31
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多