如何随机更改列表中的布尔值

agi*_*hin 4 python

我正在尝试为布尔值列表随机分配一个“真”值。当我运行代码时,我不断收到错误消息。这是代码:

    for x in population:
        if x:
            r = random.randint(0, len(population))
            population[r] = True
Run Code Online (Sandbox Code Playgroud)

不断抛出错误:

"Traceback (most recent call last):
     population[r] = True
 IndexError: list assignment index out of range"
Run Code Online (Sandbox Code Playgroud)

我确定这是微不足道的事情,但我无法弄清楚。当我将其限制在列表长度内时,索引分配如何超出范围?

Ter*_*ryA 7

random.randint(a, b)返回一个与B之间的数包容。如果函数调用的结果等于len(population),那么您正在尝试执行population[len(population)],这将引发 IndexError 因为索引从 0 开始。

简单的变化:从len(population)以下减去1 :

r = random.randint(0, len(population)-1)
Run Code Online (Sandbox Code Playgroud)

或者使用randrange(a, b),这不包括在内:

r = random.randrange(len(population))
Run Code Online (Sandbox Code Playgroud)

请注意,如果第一个参数是 0,我们不需要它,因为它会假设开始是 0。