0
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]

出了什么问题...

4

2 回答 2

4

迭代列表时不应更改列表。尝试使用列表推导:

coins = [el for el in coins if el <= n]

迭代时不应该删除元素的原因是它可能导致其他元素被跳过。例如,假设我们b要从列表中删除[a, b, c, d]

-----------------
| 一个 | 乙 | c | d |
-----------------
      ^(我们在 b 上)

-----------------
| 一个 | | c | d |
-----------------
      ^(删除 b)

-------------
| 一个 | c | d |
-------------
      ^(向下移动列表元素以填补空缺)

-------------
| 一个 | c | d |
-------------
          ^(步骤)

请注意,我们跳过了c.

于 2013-09-07T15:51:19.360 回答
0

你也可以用一个while循环来做

while i < len(coins):
    if coins[i] > n:
        coins.pop(0)
    else:
        i+=1
于 2013-09-07T15:59:15.337 回答