列出超出范围的索引,即使我已经绑定了值(python)



我有以下代码,当我运行它时,它大部分时间都能工作:


marvel_heroes = ['Wolverine','Spider-Man','Thor','Iron Man','Hulk','Captain America','Deadpool',
'Daredevil','Cyclops','Mr Fantastic','Professor X', 'Doctor Strange','Thing','Black Panther','Black Widow','Hawkeye','Vision','Shang-Chi', 'Ant-Man','Quicksilver','Star Lord',
'Rocket Raccoon','Drax','War Machine','Falcon']
marvel_heroes.append('Captain Marvel')
#print(marvel_heroes)
length = len(marvel_heroes)
print(length)
team = [marvel_heroes[random.randint(0, length)],marvel_heroes[random.randint(0, length)], marvel_heroes[random.randint(0, length)] ]

print('My team is:')
print(team)
print("n")

偶尔我会遇到这样的错误:

Traceback (most recent call last):
File "main.py", line 12, in <module>
team = [marvel_heroes[random.randint(0, length)],marvel_heroes[random.randint(0, length)], marvel_heroes[random.randint(0, length)] ]
IndexError: list index out of range

我真的不明白,当我用长度变量来限制它时,它怎么会超出范围,这是某种内存溢出问题,还是有时存在重复值的问题?

random.randint的上边界包括,因此您必须执行

random.randint(0, length - 1)

话虽如此,我建议你使用

team  = random.sample(marvel_heroes, 3)

randint()上的文档是清晰的:

返回一个随机整数N,使得<=N<=b.randrange(a,b+1(的别名。

请注意,这包括可以同时返回ab的可能性。因此,长度为5时,randint可以生成5,这将超出零索引列表的范围。CCD_ 7或CCD_。

team = random.sample(marvel_heroes, 3)

choices()会复制你当前的行为,但sample()会给你一个随机的unique选择,这似乎是你想要的。

根据官方文档,randint(a,b)将返回值x,因此a <= x <= b为true。

你可以选择randrange()来获得a <= x < b

相关内容

  • 没有找到相关文章

最新更新