0
coins=[100,50, 20, 10, 5, 2, 1]
n=10

for el in coins:
    if el>n:
        coins.remove(el)
print coins

上記のプログラムは、10 より大きいリストcoinsのすべての要素を削除することになっています。望ましい出力は次のとおりです。

[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]ます。

-----------------
| | | | b | 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 に答える