リストから重複を削除する方法 Python

⚡ スマートサマリー

重複を削除する Python リストは、set()、dict.fromkeys()、ループ、リスト内包表記、NumPyやPandasのライブラリメソッドなど、いくつかの組み込み方法で作成できます。それぞれ、順序の保持と速度のバランスが取られています。

  • 🔘 セット方法: set() は、重複のない要素を即座に返しますが、元のリストの順序は保持しません。
  • ☑️ 秩序は維持されます: dict.fromkeys() と OrderedDict は重複を削除しつつ、ping 最初に確認された挿入順序。
  • 手動制御: メンバーシップチェック付きのforループまたはリスト内包表記を使用すると、順序が保たれ、読みやすくなります。
  • 🧪 ライブラリメソッド: NumPyのunique()とPandasのunique()は、重複データを削除し、tolist()メソッドを介してリスト出力を返します。
  • 🛠️ ハッシュ可能性の限界: セットと辞書のキーにはハッシュ可能な要素が必要なので、リストや辞書にはループベースのアプローチが必要です。
  • 🤖 AIワークフロー: 機械学習パイプラインは、バイアスやデータ漏洩を防ぐために、Pandasのdrop_duplicates()を使用してトレーニングデータの重複を削除します。

リストから重複を削除する Python

Python リストから重複を削除する

リストはさまざまなものを含むコンテナです Python オブジェクトは整数、単語、値などです。他のプログラミング言語の配列に相当します。

ここでは、指定されたリストから重複を削除するさまざまな方法を見ていきます。 Python.

方法 1) Set を使用してリストから重複を削除する

リストから重複要素を削除するには、組み込み関数 set() を使用できます。set() メソッドの特徴は、重複のない要素を返すことです。

リスト [1,1,2,3,2,2,4,5,6,2,1] があります。このリストには重複する要素が多数含まれているため、それらを削除して重複のない要素のみを取得する必要があります。このリストを組み込み関数 set() に渡します。 Later 最終的なリストは、組み込み関数 list() を使用して表示されます。

得られる出力は、重複する要素がすべて削除された、異なる要素の集合です。

例:

my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))

出力:

[1, 2, 3, 4, 5, 6]

方法2) 一時リストを使用する

指定されたリストから重複を削除するには、空の一時リストを使用できます。そのためにはまず、重複を含むリストをループ処理し、重複のない項目を一時リストに追加する必要があります。 Later 一時リストがメインリストに割り当てられます。

例:

一時リストを使用した動作例を以下に示します。

my_list = [1, 2, 3, 1, 2, 4, 5, 4 ,6, 2]
print("List Before ", my_list)
temp_list = []

for i in my_list:
    if i not in temp_list:
        temp_list.append(i)

my_list = temp_list

print("List After removing duplicates ", my_list)

出力:

List Before  [1, 2, 3, 1, 2, 4, 5, 4, 6, 2]
List After removing duplicates  [1, 2, 3, 4, 5, 6]

方法3) 辞書を使用する

collectionsからOrderedDictをインポートすることで、指定されたリストから重複要素を削除できます。これはPython 2.7以降で利用可能です。OrderedDictは、キーが存在する順序で重複のない要素を返します。

リストを利用し、OrderedDict で利用可能な fromkeys() メソッドを使用して、リストから一意の要素を取得してみましょう。

OrderedDict.fromkeys() メソッドを使用するには、以下に示すように collections から OrderedDict をインポートする必要があります。

from collections import OrderedDict

OrderedDict.fromkeys() メソッドを使用して重複を削除する例を以下に示します。

例:

from collections import OrderedDict

my_list = ['a','x','a','y','a','b','b','c']

my_final_list = OrderedDict.fromkeys(my_list)

print(list(my_final_list))

出力:

['a', 'x', 'y', 'b', 'c']

Python バージョン3.5以降では、通常のdict.fromkeys()メソッドを使用してリストから重複のない要素を取得できます。dict.fromkeys()メソッドは一意のキーを返し、重複する値を取り除くのに役立ちます。

リストから一意の項目を取得するために、dict.fromkeys() をリストに対して使用する例を以下に示します。

例:

my_list = ['a','x','a','y','a','b','b','c']
my_final_list = dict.fromkeys(my_list)
print(list(my_final_list))

出力:

['a', 'x', 'y', 'b', 'c']

方法4) forループを使用する

使い方 forループ、項目のリストを調べて重複を削除します。

まず、配列を空に初期化します(myFinallist = [])。forループ内で、リスト内の項目が配列myFinallistに存在するかどうかを確認します。項目が存在しない場合は、append()メソッドを使用して項目を配列myFinallistに追加します。

したがって、重複する項目が見つかった場合、それは既に配列 myFinallist に存在しているため、挿入されません。それでは、以下の例で確認してみましょう。

例:

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinallist = []
for i in my_list:
    if i not in myFinallist:
myFinallist.append(i)
print(list(myFinallist))

出力:

[1, 2, 3, 4, 5, 6]

方法 5) リスト内包表記を使用する

リスト内包表記は Python すでに作成されているシーケンスを使用して、新しいシーケンス (リスト、辞書など) を作成するために使用される関数。これにより、長いループが削減され、コードの読みやすさと保守性が向上します。

リスト内包表記を利用して、指定されたリストから重複を削除してみましょう。

例:

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = []
[my_finallist.append(n) for n in my_list if n not in my_finallist]
print(my_finallist)

出力:

[1, 2, 3, 4, 5, 6]

方法6)NumPyのunique()メソッドを使用する

NumPyモジュールのunique()メソッドを使うと、指定されたリストから重複要素を削除できます。

NumPyを使用するには、まずnumpyモジュールをインポートします。

ステップ1) NumPyモジュールをインポートします

import numpy as np

ステップ2) unique() メソッド内で重複を含むリストを使用してください。出力は tolist() メソッドを使用してリストに変換されます。

myFinalList = np.unique(my_list).tolist()

ステップ3) 最後にリストを印刷します。

print(myFinalList)

出力を含む最終的なコードは次のとおりです。

import numpy as np
my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = np.unique(my_list).tolist()
print(myFinalList)

出力:

[1, 2, 3, 4, 5, 6]

方法 7) Pandas メソッドを使用する

Pandas モジュールには、指定されたリストから一意の要素を提供する unique() メソッドがあります。

Pandasモジュールを使用するには:

ステップ1) Pandas モジュールのインポート

import pandas as pd

ステップ2) 重複を含むリストを unique() メソッド内で使用してください。

myFinalList = pd.unique(my_list).tolist()

ステップ3) リストを印刷します:

print(myFinalList)

出力を含む最終的なコードは次のとおりです。

import pandas as pd

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = pd.unique(my_list).tolist()
print(myFinalList)

出力:

[1, 2, 3, 4, 5, 6]

方法 8) enumerate() とリスト内包表記を使用する

ここでは、リスト内包表記と enumerate() 関数を組み合わせて、重複する要素を削除します。enumerate 関数は、リスト内の各要素に対応するカウンターを持つオブジェクトを返します。例えば、(0,1)、(1,2) などです。この場合、最初の値はインデックス、2 番目の値はリストの要素です。

各要素はリスト内に存在するかどうかチェックされ、存在する場合はリストから削除されます。

例:

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = [i for j, i in enumerate(my_list) if i not in my_list[:j]]
print(list(my_finallist))

出力:

[1, 2, 3, 4, 5, 6]

よくあるご質問

いいえ。セットは順序付けされていないコレクションなので、set() は異なる順序で要素を返す可能性があります。順序を維持したまま重複を削除するには、dict.fromkeys() を使用するか、まだ出現していない項目のみを追加するループを使用してください。

大きなリストの場合、順序が重要でない場合は、要素の出現順序のチェックがO(1)であるため、set()が最も高速です。順序が重要な場合は、list(dict.fromkeys(my_list))がほぼ同等の速度で、1行で最初に出現した順序を維持できます。

set() と dict.fromkeys() はハッシュ可能な要素を必要とするため、リストや辞書では機能しません。リストをループ処理してまだ出現していない項目を追加するか、各項目をタプルまたは JSON 文字列に変換して一時的なキーとして使用してください。

list(dict.fromkeys(my_list))を使用します。 Python 3.7 の辞書は挿入順序を保持するため、キーは最初に出現した順序で保持されます。それ以前のバージョンでは、同じ結果を得るには collections.OrderedDict.fromkeys() を使用してください。

いいえ。set()、dict.fromkeys()、内包表記、NumPyやPandasのunique()などのメソッドは新しいリストを作成し、元のリストは変更しません。結果を上書きしたい場合は、同じ変数に再代入してください。

データが既に配列またはSeriesに格納されている場合、あるいはデータ分析中は、numpy.unique()またはpandas.unique()を使用してください。numpy.unique()は値をソートしますが、pandas.unique()は最初に出現した順序を保持します。単純なリストを取得するには、tolist()を呼び出してください。

機械学習パイプラインは、重複するサンプルがモデルに偏りを与えたり、訓練セットとテストセット間で情報が漏れたりしないように、訓練前に重複行を削除します。Pandasの`drop_duplicates()`は、表形式データセットをクリーニングするための一般的なツールです。

はい。GitHub Copilotとエージェント型AIアシスタントは、コメントからset()、dict.fromkeys()、またはPandasの重複排除コードを生成し、順序保持オプションを提案し、ループをリファクタリングしますが、ハッシュ化できない項目などのエッジケースは引き続き検証する必要があります。