用-1调用random.randint()吗?

时间:2019-04-22 13:35:38

标签: python python-3.x random

有人可以解释为什么range中的random.randint(0, len(messages) - 1)末尾有负1吗?该列表具有9个值:

import random

messages = ['It is certain',
            'It is decidedly so',
            'Yes definitely',
            'Reply hazy try again',
            'Ask again later',
            'Concentrate and ask again',
            'My reply is no',
            'Outlook not so good',
            'Very doubtful']

select_number = random.randint(0, len(messages) - 1)
list_select  = messages[select_number]
print(list_select)

3 个答案:

答案 0 :(得分:1)

random.randint()的第二个值是包括。它将从 10 个随机整数({{1},0123,{{ 1}},4567),列表中只有9个索引。 89,但是没有len(messages)索引,因为Python索引从9开始。相反,唯一有效的索引从messages[9]0

因此,通过使用0,该功能仅限于为8列表选择有效的索引。

该代码应改用random.choice(),它从列表中选择一个随机元素:

random.randint(0, len(messages) - 1)

在其他情况下,random.randrange()也可能是一个选项,因为它不将端点包含在可能的值中,其工作方式类似于Python索引,切片和messages

list_select = random.choice(messages)

答案 1 :(得分:0)

这是因为random.randint随机选择列表的索引,从0到8,然后选择一条消息。
现在,列表的索引从0len(messages)-1=8
根据文档:https://docs.python.org/3/library/random.html#random.randint

  

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

这意味着选择了0到8之间的整数,这是列表的有效索引。如果我们改为放置len(messages),则也将选择索引9,这对于列表中的列表是无效的索引Python,因为Python列表是0-indexed

答案 2 :(得分:0)

random.randint(a, b) 返回一个随机整数N,以使<= N <= b。

len(messages) - 1有点棘手,因为列表的范围确实是9,但是您要记住,计数是从0开始而不是1。因此,在您的情况下,len(messages)将返回9,但是第一个元素在messages[0]

这意味着在您的情况下,select_number = random.randint(0, len(messages) - 1)将从0到len(messages) - 1的数字为9-1。