Python でリストから重複を削除する
Python のリストは、データを特定の順序で格納するためのデータ構造です。リストは、int、float、文字列、別のリストなど、複数の型のデータを格納することができます。リストは変異可能であり、一度作成された値は後で変更できることを意味します。リストは角括弧 []
で表されます。
myList = [2, 1, 2, 3, 0, 6, 7, 6, 4, 8]
print(myList)
出力:
[2, 1, 2, 3, 0, 6, 7, 6, 4, 8]
以下に示すように、for
ループを使って上のリストから重複した要素を削除できます。
myList = [2, 1, 2, 3, 0, 6, 7, 6, 4, 8]
resultantList = []
for element in myList:
if element not in resultantList:
resultantList.append(element)
print(resultantList)
出力:
[2, 1, 3, 0, 6, 7, 4, 8]
これだけのコードを書きたくない場合は、Python でリストから重複した要素を削除する最もポピュラーな方法が 2つあります。
- 重複した要素を削除した後にリスト内の要素の順番を維持したくない場合は、
Set
データ構造体を使用することができます。 - 重複した要素を削除した後もリスト内の要素の順序を維持したい場合は、
OrderedDict
と呼ばれるものを使用することができます。
Python の set()
関数を使ってリストから重複を削除する
リストから重複を削除するには、Set
と呼ばれる別のデータ構造を使用することができます。セットは一意の値のみを含む順序のないデータ型です。セットが値を格納する順序は、セットに要素を挿入した順序とは異なります。セットは中括弧 {}
で表現されます。
そのため、セットの中に格納されている要素を出力するときはいつでも、出力の順番が異なります。これが、セットが順番がないためにインデックス作成ができない理由です。
mySet = {80, 10, 50, 18, 3, 50, 8, 18, 9, 8}
print(mySet)
出力:
{3, 8, 9, 10, 80, 18, 50}
要素を出力した後、要素の順序がどのように変化したかに注目してください。
セットでは、重複は許されません。つまり、同じ要素を複数回持っていても、セットはそれを 1つの要素とみなします。これが、Python でリストから重複した要素を削除するためにセットを使用する理由です。
original_list = [80, 10, 50, 18, 3, 50, 8, 18, 9, 8]
print("Original List is: ", original_list)
convert_list_to_set = set(original_list)
print("Set is: ", convert_list_to_set)
new_list = list(convert_list_to_set)
print("Resultant List is: ", new_list)
original_list = list(convert_list_to_set)
print("Removed duplicates from original list: ", original_list)
出力:
Original List is: [80, 10, 50, 18, 3, 50, 8, 18, 9, 8]
Set is: {3, 8, 9, 10, 80, 18, 50}
Resultant List is: [3, 8, 9, 10, 80, 18, 50]
Removed duplicates from original list: [3, 8, 9, 10, 80, 18, 50]
関数 set()
を適用してリストを集合に変換します。次に、list()
関数を適用して重複を除去した集合をリストに変換します。
Python で OrderDict
を用いて重複を削除してリストの順序を維持する
重複した要素を削除するためにセットを使用する場合の問題点は、特定の順番で要素を保存しないことです。したがって、結果として得られるリスト、つまり重複を削除した後に作成したリストに要素が格納される順番を気にしない場合は、Set
データ構造体を使用することができます。
しかし、重複を削除した後もリスト内の要素の順序を維持したい場合は、Python の OrderedDict
を使用することができます。OrderDict
は、リストに要素が挿入された順番を保持します。OrderDict
を使用するためには、まず Python の collections
モジュールから from collections import OrderedDict
をインポートする必要があります。
from collections import OrderedDict
myList = [2, 1, 2, 3, 0, 6, 7, 6, 8, 0, 4, 8]
final_list = list(OrderedDict.fromkeys(myList))
print(final_list)
出力:
[2, 1, 3, 0, 6, 7, 8, 4]
Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.
LinkedIn