この記事で紹介する内容は、シーケンスから重複を削除し、要素の順序を変更しないという Python の実装に関するものです。一定の参考価値があります。困っている友人は参考にしてください。お役に立てば幸いです。 。 ヘルプ。
1. 要件
シーケンス内に出現する重複要素を削除しますが、残りの要素の順序は変更しないままにしたいと考えています。重複を削除したいだけの場合、通常は、セットを構築するのが簡単な方法です:
a=[1,5,4,36,7,8,2,3,5,7] #结果为:{1, 2, 3, 4, 5, 36, 7, 8} print(set(a))
2. Solution
If the value in theシーケンスがハッシュ可能である場合、この問題はコレクションとジェネレーターを使用することで簡単に解決できます。
オブジェクトがハッシュ可能である場合、オブジェクトは存続期間中不変である必要があり、__hash__()
メソッドが必要です。整数、浮動小数点数、文字列、要素はすべて不変です。 def dedupe(items): seen=set() for item in items: if item not in seen: yield item seen.add(item) a=[1,2,3,1,9,1,5,10] print(list(dedupe(a)))
実行結果:
[1, 2, 3, 9, 5, 10]
これは、シーケンス内の要素がハッシュ可能である場合にのみ実行できます。ハッシュ不可能なオブジェクト シーケンスから重複を削除する場合は、上記のコードを少し変更する必要があります:
def dedupe(items,key=None): seen=set() for item in items: value=item if key is None else key(item) if value not in seen: yield item seen.add(value) a=[ {'x':1,'y':2}, {'x':1,'y':3}, {'x':1,'y':4}, {'x':1,'y':2}, {'x':1,'y':3}, {'x':1,'y':1}, ] print(list(dedupe(a,key=lambda d:(d['x'],d['y'])))) print(list(dedupe(a,key=lambda d:d['y'])))
実行結果:
[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}] [{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}]
ここでのパラメータ キーの機能は、次のことを指定することです。使用する関数 重複を検出するために、シーケンス内の要素をハッシュ可能な型に変換します。
以上がPython は要素の順序を変更せずにシーケンスから重複を削除する実装を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。