2

リスト内のアイテムを削除しようとしましたが、成功しませんでした。

>>> r = [1,2,3,4,5]
>>> for i in r:
    if i<3:
        del i


>>> print r
[1, 2, 3, 4, 5]

濾してみましたが、

>>> def f(i):
    True if i>2 else False


>>> print list(filter(f,r))
[]

最初のものが機能しない理由がわかりません。を使用すると、結果がまったくわかりませんfilter(function,iterable)

編集:

以下のパウロのコメントを見ると、なぜこれが機能するのかわかりません。

>>> for i in r:
    if i<3:
        r.remove(i)


>>> print r
[3, 4, 5]

イテレータの問題がまだ残っていて、コードが最初の要素だけを削除してしまうべきではありませんか ( r[0])

4

2 に答える 2

4

最初のものが機能しない理由がわかりません。

ステートメントdel iが変数の定義を解除するため、iつまり、それを含むスコープ (グローバルまたはローカル) から変数を削除するため、機能しません。

そして、 filter(function,iterable) を使用すると、結果がまったくわかりません

関数にfreturn ステートメントが含まれていません。したがって、常に を返しますNone。これは、ブール値と同等の ですFalse。したがって、filterすべての値を除外します。


おそらくすべきことは、内包表記を使用してフィルタリングし、次のようにリストを置き換えることです。

r = [i for i in r if i >= 3]

または、本当に元のリストの一部を削除して変更したい場合delは、リストのスライスに対して次のように使用します。

del r[:3]

remove以下の Paulo のコメントを見ると、[using ] が機能する理由がわかりません。

remove(r)リスト内の値を検索し、rその最初のインスタンスを削除するためです。したがって、リストを繰り返し変更しても、内部で発生する反復には影響しませんremove。ただし、アイテムの削除によってリストの繰り返しでアイテムがスキップされる場合、同じエラーが発生する可能性があることに注意してください。

于 2013-09-23T20:04:33.567 に答える