私は2つのintリストxsとys(任意の長さ)を持っており、各リストに表示される重複を効率的に削除したい。あなたが/それをあなたとループをリストを編集しないでくださいすることはできませんので、私の試みでした:値は、xsではなく、一度YSに二度まで来るPythonで2つのリストから一致を見つけて削除する
matches = [match for match in xs if match in ys]
for match in matches:
xs.remove(match)
ys.remove(match)
しかし、重要なことならば、これは以来、エラーを生成します"ys内の一致"は同じ値に対して2回trueと評価されますが、1回だけカウントする必要があります。
のであれば、明確にする:
xs = [0, 2, 4, 8, 8, 100]
ys = [1, 3, 5, 8, 8, 8, 10]
その後、8つのニーズが両方のリストから2回削除されます。
これを効率的に行うにはどうすればよいですか?ありがとう
編集:リストは必ずしも順序付けされていません。実際には両方のリストに重複が含まれている可能性があります。
これは2重複でしか動作しませんが、n重複ではないため、この例を更新しました。 –
@BenJonesああ、わかります。明確にできますか?この状況でどうなるべきか: 'xs = [1,1,1,1,2]' 'ys = [1,1,3]'?望ましい出力? 'xs = [1,1,1,2]' 'ys = [1,3']?または 'xs = [1,1,2]' 'ys = [3]'または 'xs = [1,2]' 'ys = [3]'? –
両方のリストに共通の2つの1がありますので、希望の出力はxs = [1,1,2]とys = [3]です。混乱して申し訳ありません! –