我正在尝试将一个数字插入到一系列数字的列表中,由于某种原因,这个小程序只是在那里消耗CPU能力......不知道为什么它不起作用:
number = 5
lst = [4,5,6]
if all(x > number for x in lst):
lst.insert(0,number)
elif all(x < number for x in lst):
lst.append(number)
else:
for i,v in enumerate(lst):
if v>number:
lst.insert(i-1,number)
print (lst)
预期产出:
lst = [4,5,5,6]
答案 0 :(得分:2)
你的 for 循环将数字5插入到列表中间理论上无限次(或者直到你耗尽列表消耗的任何有限资源,以先发生者为准)。 / p>
1) for i,v in enumerate(lst):
2) if v>number:
3) lst.insert(i-1,number)
在第一遍中,第1行以v = 4和i = 0开始循环。第2行发现v不大于数字。
在第二遍,第1行继续循环,v = 5,i = 1.第2行也是假的。
第三遍,第1行:v = 6,i = 2.第2行找到一个真实的陈述并移到第3行。第3行将 number 引用的对象插入到位置i - 1,将5插入列表的第1位。
此时列表是:
lst = [4, *5*, **5**, 6]
斜体5是您添加到列表中的数字。粗体5是当前指针所在的位置,i = 2.请注意,我们刚刚检查过的6随着插入而向前移动。
第四遍:v = 6,i = 3.第2行找到一个真实的陈述并移到第3行。第3行将 number 引用的对象插入位置i - 1,插入5进入列表的第2位。
此时列表是:
lst = [4, 5, *5*, **5**, 6]
等等等。
快速修复:
for i, v in enumerate(lst):
if v > number:
lst.insert(i-1, number)
**break**
您只是检查并添加一个号码,因此一旦插入就会中断循环,因为您已经完成了。