[解決済み] リスト内の重複を削除する
質問
私は、リストが重複しているかどうかをチェックし、重複している場合はそれらを削除し、重複/削除されていない項目で新しいリストを返すプログラムを書く必要があります。これは私が持っているものですが、正直なところ、私は何をすべきかわかりません。
def remove_duplicates():
t = ['a', 'b', 'c', 'd']
t2 = ['a', 'c', 'd']
for t in t2:
t.append(t.remove())
return t
解決方法は?
ユニークなアイテムのコレクションを取得するための一般的なアプローチとして
set
. セットは
順序不同
のコレクションです。
明確な
オブジェクトを作成します。任意の反復子からセットを作成するには、単にそれを組み込みの
set()
関数があります。後で再び本当のリストが必要になった場合、同様にそのセットを
list()
関数を使用します。
次の例は、あなたが行おうとしていることをすべてカバーするものです。
>>> t = [1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> t
[1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> list(set(t))
[1, 2, 3, 5, 6, 7, 8]
>>> s = [1, 2, 3]
>>> list(set(t) - set(s))
[8, 5, 6, 7]
結果例からわかるように 元の順序が維持されない . 前述のとおり、セット自体は順序のないコレクションなので、順序は失われます。セットをリストに戻すと、任意の順序が作成されます。
順序を維持する
もし、秩序を重視するのであれば、別の仕組みを使う必要があります。この場合、非常に一般的な解決策は
OrderedDict
を使用して、挿入時のキーの順序を維持します。
>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(t))
[1, 2, 3, 5, 6, 7, 8]
Python 3.7で開始 また、内蔵辞書は挿入順も保証していますので、Python 3.7 以降 (または CPython 3.6) であれば、そちらを直接使用することも可能です。
>>> list(dict.fromkeys(t))
[1, 2, 3, 5, 6, 7, 8]
この場合、最初に辞書を作成し、そこからリストを作成するというオーバーヘッドが発生する可能性があることに注意してください。実際に順序を保持する必要がない場合は、セットを使用した方が良い場合があります。特に、より多くの操作を行うことができます。以下はその例です。 この質問 は、重複を除去する際に順序を保持するための詳細と代替方法を示しています。
最後に
set
と同様に
OrderedDict
/
dict
ソリューションでは、アイテムが
ハッシュ化可能
. これは通常、それらが不変でなければならないことを意味します。もしハッシュ化できない項目 (例えばリストオブジェクト) を扱わなければならない場合は、基本的にすべての項目と他のすべての項目をネストされたループで比較しなければならない、遅いアプローチを使用しなければならないでしょう。
関連
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 2つのリストを辞書に変換するにはどうしたらいいですか?
-
[解決済み] リストにおけるdel、remove、popの違いについて
-
[解決済み] Pythonのsuper()は多重継承でどう動くのか?
-
[解決済み] リストとタプルの違いは何ですか?
-
[解決済み] リストの順番を維持したまま、重複を削除するにはどうしたらいいですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
Python jiabaライブラリの使用方法について説明
-
python implement mysql add delete check change サンプルコード
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] Pythonでリストが明確な要素だけを含むようにするには?[重複]する