Python リストの重複要素を削除 | プログラミング学習 初心者向け入門ガイド

ホーム › >>

Python リストの重複要素を削除

記事掲載:https://laptrinhcanban.com/ja

python list で重複する要素を削除するすべての方法の説明。set()関数、dict.fromkeys()関数、またはsorted() 関数を使用して、元のリストの順序を維持する必要がない、または維持したくない場合に備えて、python リストから要素を削除する方法を学習します。このレッスンの後、カスタム関数を使用して 2 次元リストから重複を削除する方法も学びます。

次のように、Python リストで重複する要素を削除する3 つの方法があり ます。

  • set() 関数: 元のリストの順序を維持せずに重複する要素を削除します
  • dict.fromkeys()関数 およびsorted()関数: 重複する要素を削除し、元のリストの順序を維持します
  • リスト内包表記を使用した自己作成関数: 2 次元リスト内の重複要素を削除します

尚、通常の方法でPython リストから要素を削除したいだけの場合は、Python リストから要素を削除する の記事を参照してください。

元のリストの順序を維持せずに重複する要素を削除 | set()関数

元のリストの順序を維持せずに python リストの重複要素を削除したい場合は、pythonで set() 関数を使用します。

set() 関数はリストを python のセットに変換します。セット型では要素が一意で複製できないため、元のリストの重複要素は削除されます。

最後に、 python の list() 関数を使用して、上記の要素を含むセットをリスト型に変換します。

セット型にはインデックスがないため、元のリストの順序は保持されないことに注意してください。

具体例:

l = [1, 2, 3, 1, 2, 4, 4, 2, 3]

# Chuyển list sang set và xóa phần tử trùng nhau
s = set(l)
print(s)
#>> {1, 2, 3, 4}

# Chuyển lại set về list
unique_l = list(s)
print(unique_l)
#>> [1, 2, 3, 4]

次のように set() 関数を使用して、Python リスト内の文字列型の重複要素を削除することもできます。:

l = ['red', 'blue', 'yellow', 'black' , 'red']
unique_l=list(set(l))

print(unique_l)
#>> ['blue', 'black', 'yellow', 'red']

Python リスト内のリストまたはPython リスト内のタプルでは、TypeError が発生するため、 set() 関数を使用して重複する要素を削除できないことに注意してください。

l = [ 1, 2,  [3, 4] , [3,4]]
unique_l=list(set(l))

>>> TypeError: unhashable type: 'list'

このような 2 次元リストから重複を削除する方法については、以下で説明します。

重複する要素を削除し、元のリストの順序を維持します

set 型には要素のインデックスがないため、 set を使用してリスト内の重複要素を削除する方法は、元のリストの順序を維持できません。

Python リストで重複する要素を削除し、元のリストの順序を維持したい場合は、 set() の代わりにdict.fromkeys() 関数または python の sorted() 関数を使用します。

dict.fromkeys() 関数の使用

関数 dict.fromkeys() は、リストまたはタプルを Python 辞書型で使用されるキーに変換するために使用されます。set 型と同様に、辞書型のキーも一意であり、複製できないため、これを適用して python list の重複要素を削除できます。尚、辞書内のキーは順序付けられているため、dict.fromkeys() を使用すると、返されるリストは元のリストと同じ順序になります。

具体例::

l = [1, 2, 3, 1, 2, 4, 4, 2, 3]

# リストを辞書に変換して重複を削除
d = dict.fromkeys(l)
print(d)
#>> 1: None, 2: None, 3: None, 4: None}

# 辞書をリストに変換する
unique_l = list(d)
print(unique_l)
#>> [1, 2, 3, 4]

string要素を含むリストも同様。

l = ['red', 'blue', 'yellow', 'black' , 'red']
unique_l=list(dict.fromkeys(l))

print(unique_l)
#>> ['red', 'blue', 'yellow', 'black']

sorted() 関数の使用

新しい dict.fromkeys() 関数は Python3.7 から適用されているため、関数 dict.fromkeys()やsorted()など を使用して、元のリストの順序を維持しながらPython リストから重複を削除する古い方法があります。

具体例:

l = [1, 2, 3, 1, 2, 4, 4, 2, 3]
print(sorted(set(l), key=l.index))
#> [1, 2, 3, 4]

ll = ['red', 'blue', 'yellow', 'black' , 'red']
print(sorted(set(ll), key=ll.index))
#> ['red', 'blue', 'yellow', 'black']

sorted() 関数の使用方法については、リスト python の要素の並べ替えの記事を参照することもできます。

2 次元リストの重複要素を削除する

2 次元リストから重複する要素を削除する場合、TypeError が発生するため、上記のメソッドは使用できません。

l = [ 1, 2,  [3, 4] , [3,4]]
unique_l=list(set(l))

>>> TypeError: unhashable type: 'list'

l_2d = [[1, 1], [0, 1], [0, 1], [0, 0]]
dict.fromkeys(l_2d)

>>> TypeError: unhashable type: 'list'

理由は、上記のような 2 次元リストはハッシュ可能な値ではなく、セット内の要素または辞書内のキーはハッシュ可能な値でしか作成できないため、エラーが発生したためです。

2 次元リストから重複を削除する組み込み関数やメソッドがないため、この問題を解決するには自分で関数を作成する必要があります。

たとえば、リスト内包表記を使用して、次のような削除関数を記述できます。

def unique_list(l_2d):
kiemtra = []
return [x for x in l_2d if x not in kiemtra and not kiemtra.append(x)]

次のように、関数を呼び出して、2 次元リスト内の重複要素を削除します。

l_2d = [[1, 1], [0, 1], [0, 1], [0, 0]]
l_2d_unique = unique_list(l)
print(l_unique)
#>> [[1, 1], [0, 1], [0, 0]]

上記の組み込み関数を使用して、異なるデータ型の要素を持つ 2 次元リスト内の重複要素を削除することもできます。

たとえば、 number 型と list 型の要素を持つ 2 次元リストで重複する要素を削除します。

l_2d = [ 1, 2,  [3, 4] , [3,4]]
print(unique_list(l_2d_2))
#>> [1, 2, [3, 4]]

またはさらに良いことに、tuple() にも要素を含む 2 次元リストを使用します。:

l_2d_mix = [ 1, 2, [3, 4] , [3,4] , ('a', 'b') , ('a', 'b') ]
print(unique_list(l_2d_mix))
#>> [1, 2, [3, 4], ('a', 'b')]

まとめ

上記 Kiyoshi はpython list で重複した要素を削除する方法を示しました。レッスンの内容をよりよく理解するために、今日の例でもう一度練習してください。

そして、次のレッスンで Python の知識についてさらに学びましょう。

URL Link

https://laptrinhcanban.com/ja/python/nhap-mon-lap-trinh-python/list-trong-python/xoa-phan-tu-trung-nhau-trong-list-python/

この記事は役立つと思ったらいいね!とシェアをお願いします
">

ホーム  › >>

Profile
きよしです!笑

Author: Kiyoshi (Chis Thanh)

Kiyoshi was a former international student in Japan. After graduating from Toyama University in 2017, Kiyoshi is currently working as a BrSE in Tokyo, Japan.