Python
コンテナデータ型
list
重複なし

Python list 重複を削除します: 説明と実例

この記事では、Python list remove duplicatesに関連する6つのトピックを取り上げます。

  • リストから重複を削除する関数の定義
  • 入れ子になったリスト
  • リストをランダム化するときに重複を削除する方法
  • 重複を削除する際の順序の維持
  • 重複の削除とソート
  • 2つのリストの重複を削除する

それぞれのトピックについて、簡単な説明と例を示します。

1. リストから重複を削除する関数を定義する

Python のリストから重複を取り除くには、 set() 関数を使います。 Pythonのデフォルトのデータ型であるsetは、要素の重複を許さないという意味で特別です。

💡

もっと詳しく知りたい方は、リスト vs タプル vs 辞書 vs セットをご覧ください。

set()関数はリストのような反復可能な要素を集合に変換し、自動的に重複を削除します。 この関数を使って、次のようにリスト内の重複をすべて削除する関数を書くことができます。

サンプルコードを見てみましょう

def remove_duplicates(lst):
    return list(set(lst))
 
my_list = [1, 2, 3, 3, 4, 2, 1]
result = remove_duplicates(my_list)
 
print(result)
 
# Output
[1, 2, 3, 4]

上のコードでは set() を使って重複を削除し、list() でリストに変換して返しています。

この場合の注意点として、既存のリストの順序は保証されません。 Python の集合は順序を持たないデータ型なので、リストに変換したときに元の順序が保持されない可能性があります。

リストの重複を削除する際に順序を保持したい場合は、 Section 4 を参照してください。

2. 入れ子リスト内の重複の除去

Pythonの入れ子リストから重複を削除する方法は少し異なります。 set()を使って入れ子リストから重複を取り除くことはできないので、ループを使って重複を取り除く必要があります。

以下は入れ子リストから重複を削除する関数のサンプルコードです:

def remove_duplicates_nested(lst):
    result = []
    for sublist in lst:
        if sublist not in result:
            result.append(sublist)
    return result
 
my_list = [[1, 2, 3], [3, 4, 5], [1, 2, 3], [6, 7, 8]]
result = remove_duplicates_nested(my_list)
print(result)
 
# Output
[[1, 2, 3], [3, 4, 5], [6, 7, 8]]

上のコードは空のリスト result を作成し、ダブルリスト lst を繰り返し、それぞれのサブリストが result に既に存在するかどうかをチェックします。 それが result に存在しない場合のみ、それは result に追加されます。

これにより、重複するサブリストが取り除かれ、最終的にユニークな結果が返されます。

3. リストをランダム化する際に重複を削除する方法

Python のリストからランダムに項目を抽出し、重複を削除するには以下の手順を実行します。

  1. 重複を取り除いた新しいリストを作成します。
  2. 新しいリストからランダムに項目を抽出する。

これを実装するためのサンプルコードを以下に示します。

import random
 
def get_random_elements(lst, num_elements):
    unique_elements = list(set(lst))
    random_elements = random.sample(unique_elements, num_elements)
    return random_elements
 
my_list = [1, 2, 3, 3, 4, 2, 1]
result = get_random_elements(my_list, 3)
print(result)
 
# Output
[1, 4, 2]

上のコードでは、set() を使用して重複を削除し、list() に変換して新しいリスト unique_elements を作成しています。

次に random.sample() 関数を使用して、 unique_elements から num_elements 個の要素をランダムに抽出して random_elements を生成します。 そして random_elements を返します。

💡

random.sample()関数は、リストから重複していない項目をランダムに選択します。

4. 重複を削除する際に順番を保持する

set()関数を使用した重複除去メソッドは、リストの既存の順序を無視します。 これを回避し、重複除去時に順序を保持する方法を見てみましょう。

Python では、collections モジュールの OrderedDict クラスと list() を使用することで、順番を保持したままリストの重複を削除することができます。 これらを使用したコード例を示します

from collections import OrderedDict
 
def remove_duplicates(lst):
    return list(OrderedDict.fromkeys(lst))
 
my_list = [1, 2, 3, 3, 4, 2, 1]
result = remove_duplicates(my_list)
print(result)
 
# Output
[1, 2, 3, 4]

上記のコードでは、関数 OrderedDict.fromkeys() を使用して、重複を取り除いた順序付き辞書を作成し、それをリストに変換しています。

OrderedDictは辞書のようなクラスで、辞書に似ていますが、項目の順序を保持します。 そのため、fromkeys() メソッドを使用して重複を取り除いた辞書を作成すると、重複を取り除いた後も項目の順番は保持されます。 次に list() 関数を使って辞書をリストに戻します。

5. 重複の削除とリストのソート

Pythonでリスト項目の重複を取り除き、ソートするには以下のようにします。

  1. 重複を取り除いた新しいリストを作成します。
  2. 新たに作成したリストをソートする。

これを実装するサンプルコードを以下に示します。

def remove_duplicates_and_sort(lst):
    unique_elements = list(set(lst))
    sorted_elements = sorted(unique_elements)
    return sorted_elements
 
my_list = [3, 2, 1, 4, 3, 2, 1]
result = remove_duplicates_and_sort(my_list)
print(result)
 
# Output
[1, 2, 3, 4]

上のコードでは、set() を使って重複を削除し、list に変換して新しいリスト unique_elements を作成します。

次に sorted() 関数を使って unique_elements を昇順にソートする sorted_elements を作成します。 そして sorted_elements を返します。

💡

sorted()関数はリストでソートされた新しいリストを返します。 詳しくは、Sorting listsを参照してください。

6. 二つのリストを重複排除する方法

2つのリストから重複を削除する方法は、Join listsのセクション4`で説明しています。

そのセクションを読んでください。

結論

この投稿では、Pythonのリストが重複を削除する方法についての質問に答えました。

あなたの実務に役立つことを願っています。

copyright for Python list 重複を削除します: 説明と実例

© 2023 All rights reserved.