coins=[100,50, 20, 10, 5, 2, 1]
n=10
for el in coins:
if el>n:
coins.remove(el)
print coins
上述程序应该删除列表币中大于10的所有元素 所需的输出是
[10, 5, 2, 1]
但我正在
[50, 10, 5, 2, 1]
出了什么问题......
答案 0 :(得分:4)
在迭代列表时,您不应该更改列表。请尝试使用list comprehension代替:
coins = [el for el in coins if el <= n]
您在迭代时不应删除元素的原因是因为它可能导致跳过其他元素。例如,假设我们要从列表b
中删除[a, b, c, d]
:
----------------- | a | b | c | d | ----------------- ^ (we're on b) ----------------- | a | | c | d | ----------------- ^ (remove b) ------------- | a | c | d | ------------- ^ (shift elements of list down to fill vacancy) ------------- | a | c | d | ------------- ^ (step)
请注意,我们跳过c
。
答案 1 :(得分:0)
您也可以使用while循环
while i < len(coins):
if coins[i] > n:
coins.pop(0)
else:
i+=1