为什么此for循环提早结束? Python 3.6

时间:2018-08-16 22:23:40

标签: python loops for-loop

我正在制作一个程序,该程序删除从element [2]开始的列表的每三个元素。在此for循环快要结束时,程序会过早停止。

import random

inputrange = int(input('How many numbers do you want in the list?'))
intmax = int(input('What is the largest possible integer in the list?'))
intmin = int(input('What is the smallest possible integer in the list'))

rand = [random.randint(intmin,intmax) for i in range(inputrange)]


for i in rand:
    del rand[2::3]
    print(rand[2::3])
    print(rand)

print(rand)

在一个以100个元素开头的列表中(仅作为示例),我在rand中以7个元素结束。为什么?该程序应继续del rand[2::3],直到没有更多元素允许删除为止。给定上述100个元素,要剩余7个元素,循环应再运行4次,直到仅存在rand[0]rand[1]。但是我只剩下rand[0, 6]

1 个答案:

答案 0 :(得分:0)

我不太了解您的问题,但是我将解释您的代码会发生什么情况。

它的循环基于每次迭代中的修改后的列表,也就是说,每次都会变小。以您的列表包含14个元素的情况为例,如下所示:

app.js

在循环的第一次迭代中,i = 631,元素571,318,132,183从列表中删除,剩下以下列表。

import '../css/styles.scss';
import 'babel-polyfill';
import $ from 'jquery';

,循环i的第二次迭代将等于列表485的第二个值。通过减去以下值将删除值268、297、667:

[631, 485, 571, 268, 407, 318, 610, 297, 132, 159, 525, 183, 667,230]

i现在具有第三元素407的值。重复该过程将具有:

[631, 485, 268, 407, 610, 297, 159, 525, 667, 230]

此时,我将拥有不存在的第五个元素的值。然后关闭循环。

要解决您的问题,可以使用列表的初始大小,如下面的代码所示

[631, 485, 407, 610, 159, 525, 230]

或者我建议使用while循环:

[631, 485, 610, 159, 230]

i = 159
[631, 485, 159, 230]

希望您已解决您的疑问。谢谢。