こんにちは、私はPythonで2つのリストを持っており、両方のリストから共通の値を削除したいとします。解決策の1つは、Pythonの2つのリストから共通の値を削除する
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [43, 3123, 543, 76, 879, 32, 14241, 342, 2, 3, 4]
for i in x:
if i in y:
x.remove(i)
y.remove(i)
正しいと思われます。その理由は、リストから項目を削除すると、その指標が繰り返し処理されるためです。したがって、値がお互いに近いリスト内の2つの共通の値については、後の値が欠落します(コードは反復しません)。 結果は次のようになります。
>>> x
[1, 3, 5, 6, 8, 9, 10]
>>> y
[43, 3123, 543, 76, 879, 32, 14241, 342, 3]
だから我々は値'3'
が欠落しています。
私が言及した動作の理由はありますか?または何か他のことを間違っているのですか?
はい、これは、オブジェクトの反復処理中にオブジェクトを変更することによって発生する問題です。 –
この質問を見てください:[反復処理中にリストから項目を削除する](https://stackoverflow.com/questions/1207406/remove-items-from-a-list- while-iterating) – direprobs
これは強くお勧めします反復処理中の値を変更します。これは、あなたのコードが何をしているのかを理解しようとする人にとって、ループの流れを判断することを困難にする可能性があります。このような場合は、通常、リスト(または他の反復可能オブジェクト)の別のコピーを変更するか、インデックスを繰り返してリストにスライスすることをお勧めします:for i in range(len(x)):print (x [i]) ' – Aaron