Python在列表序列中插入数字

时间:2017-05-08 15:44:21

标签: python list

我正在尝试将一个数字插入到一系列数字的列表中,由于某种原因,这个小程序只是在那里消耗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]

1 个答案:

答案 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**

您只是检查并添加一个号码,因此一旦插入就会中断循环,因为您已经完成了。

相关问题