这个清单有什么问题

时间:2013-09-07 15:49:28

标签: list python-2.7

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]

出了什么问题......

2 个答案:

答案 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