为啥这个while循环在Python中永远不会停止
Posted
技术标签:
【中文标题】为啥这个while循环在Python中永远不会停止【英文标题】:Why does this while loop never stops in Python为什么这个while循环在Python中永远不会停止 【发布时间】:2021-11-28 15:34:18 【问题描述】:我正在尝试使用 Python 3.8 生成 100 个唯一随机数的列表。为此,我使用以下代码块:
import random
list_1_unique = [random.randint(0,30)]
for i in range(1, 100):
x = random.randint(0, 30)
while x in list_1_unique:
x = random.randint(0, 30)
list_1_unique.append(x)
list_1_unique
但是一旦我运行它,Ipython 控制台就永远不会停止,所以它进入了永恒循环,我不明白为什么?有人能猜到为什么吗?
【问题讨论】:
当 'x' 追加到列表时,列表大小发生变化 你生成一个随机数,然后将它添加到一个列表中,然后检查它是否在该列表中。这将一直持续到内存不足为止。 我删除了list_1_unique.append(x)前面的缩进,还是一样。 【参考方案1】:您运行 for 循环的次数大于您可以从 randint 获得的可能不同值的数量,因此在 30 步左右后您的列表 list_1_unique em> 将具有所有可能的值,并且在 31° 步骤中,您将进入无限循环,因为您生成的任何 x 值都将在您的列表中,因此您无法退出 while 循环。
换句话说,你不能从一个只包含 30 个对象的盒子中挑选 100 个对象。
如果你想要一个包含 N 个随机数的样本,最好使用random.sample
>>> import random
>>> random.sample(range(1000),10)
[840, 872, 312, 952, 826, 867, 99, 4, 132, 745]
>>>
【讨论】:
完美。谢谢【参考方案2】:以下情况导致无限循环:
while x in list_1_unique
如果 x 在第一次点击 while 循环时恰好在列表中,那么你就走了。既然这样重复了 100 次,你猜怎么着,它一定会发生。
【讨论】:
如果 x 在 list_1_unique 我正在更新 x 的值,所以我认为你错了。 @G.T.不,您没有更改列表中 x 的值,而是添加了一个新值。要更改以前的值,您必须执行list_name[index] = new_value
。
@G.T.退出 while 循环后更新 x 并将其附加到列表中。列表不断获得越来越多的值,直到无法选择不在列表中的 x。以上是关于为啥这个while循环在Python中永远不会停止的主要内容,如果未能解决你的问题,请参考以下文章