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

この記事では、重複する可能性のあるリストから一意のリストを取得する操作の 1 つに焦点を当てます。リスト操作から重複を削除することには多くの用途があるため、その知識は知っておくとよいでしょう。 パイソン。

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

この記事で説明する方法は次のとおりです。

set() メソッドを使用してリストから重複を削除する

これは、リストから重複を削除する最も一般的な方法です。 set() メソッド 。しかし、このアプローチの主な顕著な欠点は、この特定の方法では要素の順序が失われることです。

Python3




# initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> # using set() to remove duplicated from list> test_list> => list> (> set> (test_list))> # printing list after removal> # distorted ordering> print> (> 'The list after removing duplicates : '> > +> str> (test_list))>

出力

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 3, 5, 6] 

時間計算量: の上)
空間の複雑さ: の上)

リスト内包表記を使用してリストから重複を削除する

このメソッドは上記のメソッドと同様に機能しますが、これは、 リストの理解。 注文

Python3




# initializing list> test_list> => [> 1> ,> 3> ,> 5> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> # using list comprehension to remove duplicated from list> res> => []> [res.append(x)> for> x> in> test_list> if> x> not> in> res]> # printing list after removal> print> (> 'The list after removing duplicates : '> > +> str> (res))>

出力

The original list is : [1, 3, 5, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 3, 5, 6] 

時間計算量: の上)
空間の複雑さ: の上)

enumerate() のリスト内包表記を使用してリストから重複を削除します。

リスト内包表記 と相まって 列挙関数 もこのタスクを達成できます。基本的に、すでに発生した要素を検索し、追加をスキップします。リストの順序が保持されます。

Python3




# initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> # using list comprehension + enumerate() to remove duplicated from list> res> => [i> for> n, i> in> enumerate> (test_list)> if> i> not> in> test_list[:n]]> # printing list after removal> print> (> 'The list after removing duplicates : '> > +> str> (res))>

出力

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6] 

時間計算量: O(n^2)
空間の複雑さ: の上)

collections.OrderedDict.fromkeys() を使用して、Python のリストから重複を削除します。

これは、特定のタスクを達成するための最も速い方法です。まず重複を削除し、リストに変換する必要がある辞書を返します。これは文字列の場合にもうまく機能します。

Python3




# using collections.OrderedDict.fromkeys()> from> collections> import> OrderedDict> # initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> # using collections.OrderedDict.fromkeys() to remove duplicated from list> res> => list> (OrderedDict.fromkeys(test_list))> # printing list after removal> print> (> 'The list after removing duplicates : '> > +> str> (res))>

出力

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6] 

時間計算量: の上)
空間の複雑さ: の上)

in演算子ではなくin演算子を使用してリストから重複を削除します

ここでは、リストを反復処理して、入力リストの要素を保持する対応するリストを維持し、新しい要素を対応するリストに追加する前に、その要素が対応するリストにすでに存在するかどうかを確認します。入力リストの重複を削除できます。

Python3




# initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> +> str> (test_list))> res> => []> for> i> in> test_list:> > if> i> not> in> res:> > res.append(i)> # printing list after removal> print> (> 'The list after removing duplicates : '> +> str> (res))>

出力

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6] 

時間計算量: O(n^2)
空間の複雑さ: の上)

を使用してリストから重複を削除します リスト内包表記と Array.index() メソッド

このメソッドでは、リスト内包表記を使用してリストを反復処理し、配列インデックスを使用して配列から項目を取得します。配列内の要素の最初のインデックスが要素の現在のインデックスと一致する場合、または要素が無視される場合にのみ、項目を配列に追加します。

パイソン




# initializing list> arr> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> +> str> (arr))> # using list comprehension + arr.index()> res> => [arr[i]> for> i> in> range> (> len> (arr))> if> i> => => arr.index(arr[i]) ]> # printing list after removal of duplicate> print> (> 'The list after removing duplicates :'> > ,res)>

出力

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] ('The list after removing duplicates :', [1, 5, 3, 6]) 

時間計算量: O(n^2)
空間の複雑さ: の上)

を使用してリストから重複を削除します または Counter() メソッド

この方法では、 Counter() メソッド 指定された配列から辞書を作成します。次に、次を使用してすべてのキーを取得します キー() 前のリストの一意の値のみを与えるメソッド。

Python3




from> collections> import> Counter> # initializing list> arr> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> +> str> (arr))> # using Counter() + keys() to remove duplicated from list> temp> => Counter(arr)> res> => [> *> temp]> # printing list after removal of duplicate> print> (> 'The list after removing duplicates :'> > ,res)>

出力

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6] 

時間計算量: の上)
空間の複雑さ: の上)

numpy独自のメソッドを使用してリストから重複を削除します

このメソッドは、リストに同じタイプの要素が含まれている場合に使用され、リストから重複を削除するために使用されます。まずリストを numpy配列 そして、 numpy unique() メソッド 重複する要素をすべてリストから削除します。

注: コマンド pip install numpy を使用して numpy モジュールをインストールします。 重複

Python3




# initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> > # using numpy> import> numpy as np> > # removing duplicated from list> res> => np.unique(test_list)> > # printing list after removal> print> (> 'The list after removing duplicates : '> > +> str> (res))>

出力

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1 3 5 6] 

時間計算量: の上)
空間の複雑さ: の上)

パンダデータフレームの使用

pandas.DataFrame.drop_duplicates() メソッドを使用して、リストから重複を削除することもできます。このメソッドは、重複が削除された新しい DataFrame と、元のデータ フレーム データを返します。 フレーム は変わらないままです。

アルゴリズム:

リストを使用して pandas データ フレームを作成します。 DataFram で Drop_duplicates() メソッドを使用し、結果の DataFrame をリストに変換します。

Python3




import> pandas as pd> # initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> +> str> (test_list))> # creating DataFrame> df> => pd.DataFrame({> 'col'> : test_list})> # using drop_duplicates() method> df.drop_duplicates(inplace> => True> )> # converting back to list> res> => df[> 'col'> ].tolist()> # printing list after removal> print> (> 'The list after removing duplicates : '> +> str> (res))>

出力:

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1 , 5 , 3, 6] 

時間計算量: drop_duplicates() メソッドの時間計算量は、重複を削除する前に値を並べ替えるため、O(n log n) です。 DataFrame からリストへの変換には O(n) 時間がかかります。したがって、このメソッドの全体的な時間計算量は O(n log n) です。

空間の複雑さ: それぞれ n 個の要素を持つ新しい DataFrame とリストが作成されるため、このメソッドの空間計算量は O(n) です。