我有一本字典
k = {'a':[7,2,3],'b':[7,2,7], 'c': [8,9,10]}
其中每个val都是一个列表。我想删除val中的第i个术语(取决于条件)而不超出范围。这是它的代码
for i in range(len(k['a'])):
if k['a'][i] == k['b'][i]:
pass
else:
for key in k:
del [k[key][i]]
这将返回一个等同于此
的字典{'a':[7,2],'b':[7,2], 'c': [8,9]}
但是如果字典是这个
k = {'a':[6,2,3],'b':[7,2,7], 'c': [8,9,10]}
我会得到这个错误
list index out of range
我如何删除键值以便我不会收到此错误?
答案 0 :(得分:0)
问题是当您从每个数组中删除一个项目时,这些数组的大小会减一。因此,主循环变成一次迭代太长了。
问题的说明:
>>> a = [1, 2, 3]
>>> i = 2
>>> a[i]
3
>>> len(a)
3
>>> del [a[1]]
>>> a
[1, 3]
>>> len(a)
2
>>> a[i] # used to work
IndexError: list index out of range
为了使索引和循环持续时间能够解决,你需要做这样的事情:
i = 0
while i < len(k['a']):
if k['a'][i] == k['b'][i]:
i += 1
else:
for key in k:
del [k[key][i]]