正在执行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
答案 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]
相反,请采取相反的做法,并利用列表理解的力量!