不满足if语句的元素将跳过代码

时间:2019-05-15 02:57:18

标签: python

正在执行open.kattis.com问题,但是我的for循环中的代码似乎编码错误。我的for循环正在跳过元素。

我进行了各种调试,并尝试切换顺序。但是,很明显,代码只是在x[i] > 0处跳过元素。

    y = int(input())
    x= input().split(' ')
    cont = True
    i = -1
    while i <len(x):
      i += 1
      print(int(x[i])-y)
      x[i] = int(x[i])-y
      print(x)
      if cont == True and x[i]<0:
        x.pop(i)
        continue
      else:
        cont = False

在输入下方使用:

y =   20
x = 18 35 6 80 15 21

-2
[-2, '35', '6', '80', '15', '21']

-14
['35', -14, '80', '15', '21']

-5
['35', '80', -5, '21']

然后返回错误:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
    print(int(x[i])-y)
IndexError: list index out of range

4 个答案:

答案 0 :(得分:0)

for i in range (0, len(x)):
  x[i] = int(x[i])-y
  x.pop(i)

此代码可以使IndexError: list index out of range 因为x.pop()减少了x列表,所以x[i]可能会出错

答案 1 :(得分:0)

pop从列表中删除元素,因此长度小于原始列表。但是您将变量i移了0到原始列表的长度,结果发生了index out of range错误。

答案 2 :(得分:0)

要简单地解决此问题,请在执行x.pop()之后将i减1。

...
x.pop()
i -= 1
continue
...

第一遍之后,35成为列表中的第一个数字,但是第二遍您的索引增加到了2。所以x [i]是x [2] = -14

到列表末尾时,对于给定的索引,列表变得太短,从而导致超出范围的错误。

答案 3 :(得分:0)

您面临的问题是弹出时正在检查x,因此循环索引较大时列表x会变小。 解决方案:

y = 20
x = "18 35 6 80 15 21".split(' ')
list_of_numbers = range(0, len(x))
[int(x[number]) for number in list_of_numbers if (int(x[number])-y)> 0]

[35, 80, 21]

相反,请采取相反的做法,并利用列表理解的力量!