Pythonリストを巡回中に安全に削除

1446 ワード

今日仕事をする时、1つのリストを遍歴してその中の要求に合わない削除を削除する必要がありますそこで、リストを遍歴する同时に要素を削除して安全ではありませんかを考えて、それからインターネットでいくつかの材料を探してここでまとめました
例:
a = [1, 2, 3, 4, 5]
for i in a:
    if i != 4:
        a.remove(i)
print a

上記のプログラムでは、リストの4に等しくない数字を削除しようとしたが、出力された結果は
[ 2, 4]

実は私たちが遍歴しながらリストの中の要素を削除すると、リストの内容がすぐに変化して、後続の遍歴に問題が発生する上記のプログラムでは、i=1のとき、i != 4だったので、a.remove(i)は1を削除し、リストaは[2, 3, 4, 5]になってiが次の反復を行うと、直接3にジャンプしたので、2は残っています
最も簡単な方法は、巡回するときに、新しいリストを作成して元のリストの内容を保存して反復することです.たとえば、次のようにします.
a = [1, 2, 3, 4, 5]
for i in a[:]:
    if i != 4:
        a.remove(i)
print a

上記のプログラムは、スライス操作によって直接一時的なリストを作成して反復すると、反復中に元のリストaを操作してもスライスリストに影響を及ぼさない