Python リストの重複要素をチェックして取得 | プログラミング学習 初心者向け入門ガイド

ホーム › >>

Python リストの重複要素をチェックして取得

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

Python リストの重複要素をチェックして取得するすべての方法に関するチュートリアル。このレッスンの後、Python リストで重複をチェックする方法と、リストに重複がある場合に Python リストで重複を取得する方法を学習します。

Python リストの重複要素をチェック

通常のリストで重複をチェック

python リストに重複する要素があるかどうかを確認するには、 python set() 関数を使用します。

Python リストの重複要素の削除の記事では、 set 関数を使用してリスト内の重複要素を削除する方法を既に知っていますよね?

ここでの考え方は、元のリストから重複する要素を削除してセットを取得し、セット内と元のリスト内の要素の数を互いに比較するというものです。2 つの値が等しい場合、重複は削除されないため、元のリストに重複はありません。

逆に、これら 2 つの値が異なる場合は、元のリストに重複した要素があることを意味します。

具体的には、python リスト内の重複をチェックする関数を作成し、以下を使用します。

def check_duplicate_list(mylist):
if len(mylist) != len(set(mylist)):
return "リストに重複要素はあります。"
else:
return "リストに重複要素はありません。"

l = [0, 1, 2]
print(check_duplicate_list(l))
##> リストに重複要素はありません。

l = ['a', 'b', 'c', 'a']
print(check_duplicate_list(l))
##> リストに重複要素はあります。

リスト内の重複要素のチェックに加えて、上記の組み込み関数check_duplicate_list()を使用して、次のようにタプル内の重複要素をチェックすることもできます。

t = (0, 1, 2)
print(check_duplicate_list(t))
##> リストに重複要素はありません。

t = ('a', 'b', 'c', 'a')
print(check_duplicate_list(t))
#>> リストに重複要素はあります。

2 次元リストには hasable 値ではない要素が含まれているため、リスト関数を使用してセットに変換できないため、このメソッドを使用して python の 2 次元リストの重複をチェックできないことに注意してください。以下のエラーが発生します。

l_2d = [[0, 1], [1, 1], [0, 1], [1, 0]]
>>> print(has_duplicates(l_2d))
>>> TypeError: unhashable type: 'list'

代わりに、以下の方法を使用します。

Pythonの2次元リストで重複要素をチェック

Python で 2 次元リストの重複をチェックするには、リスト内の要素をチェックする通常の方法と同じ考え方を共有します。これは [2 次元リスト内の重複を削除]する前と後のリスト内の数値要素を比較し、重複有無を確認します。

ただし、set() 関数は 2 次元リストでは使用できないため、新しい関数を作成し、次のように Python で 2 次元リスト内の重複要素をチェックする関数を使用します。

def check_duplicate_list_all(l_2d):
kiemtra = []
unique_list = [x for x in l_2d if x not in kiemtra and not kiemtra.append(x)]
if len(l_2d) != len(unique_list):
return "リストに重複要素はあります。"
else:
return "リストに重複要素はありません。"


l_2d1 = [[0, 0], [0, 1], [1, 1], [1, 0]]
print(check_duplicate_list_all(l_2d1))
#>> リストに重複要素はありません。

l_2d2 = [['a', 'b'], ['a', 'b'], [1, 1], [1, 1]]
print(check_duplicate_list_all(l_2d2))
#>> リストに重複要素はありません。

python リストで重複をチェックする一般的な 方法

上記で、set() 関数を使用して Python リストの重複をチェックすることは、Python の 2 次元リストには使用できないこと、および2 次元リストをチェックする別の関数を作成する方法を学びました。

ただし、ここで特別なことは、実際、上でのcheck_duplicate_list_all()関数は通常のリストにも使用できることです。

例えば:

def check_duplicate_list_all(l_2d):
kiemtra = []
unique_list = [x for x in l_2d if x not in kiemtra and not kiemtra.append(x)]
if len(l_2d) != len(unique_list):
return "リストに重複要素はあります。"
else:
return "リストに重複要素はありません。"

l = [0, 1, 2]
print(check_duplicate_list_all(l))
##> リストに重複要素はありません。

l = ['a', 'b', 'c', 'a']
print(check_duplicate_list_all(l))
##> リストに重複要素はあります。

上記の関数を使用して、Python タプルの重複をチェックすることもできます。

t = (0, 1, 2)
print(check_duplicate_list_all(t))
##> リストに重複要素はありません。

t = ('a', 'b', 'c', 'a')
print(check_duplicate_list_all(t))
#>> リストに重複要素はあります。

したがって、一般的にすべてのケースで、次のカスタム関数を使用して、リスト内の重複または python のタプルをチェックします。

def check_duplicate_list_all(l_2d):
kiemtra = []
unique_list = [x for x in l_2d if x not in kiemtra and not kiemtra.append(x)]
if len(l_2d) != len(unique_list):
return "リストに重複要素はあります。 hoặc tuple python"
else:
return "リストに重複要素はありません。 hoặc tuple python"

リストで重複要素を取得する

リストの重複要素を取得する | collections.Counter()

Python list で重複する要素を取得するには、 collectionモジュールでのCounter()関数を次の構文で使用します。

import collections

collections.Counter( l )

そのでlとは、重複する要素を取り出したい元のリスト。collections.Counter() 関数の結果は、キーと値のペアが要素であり、元のリストでのその出現回数を持つ辞書です。

例えば:

import collections

l = [1, 2, 1, 2, 5, 3, 4, 2, 3]
c = collections.Counter(l)
print(c)
#>> Counter({2: 3, 1: 2, 3: 2, 5: 1, 4: 1})

Counter() 関数の結果を取得した後、pythonでのitem()関数を使用して、元のリストの同一の要素である 1 より大きい値を持つキーを取得できます。

具体的には、リスト内包表記と組み合わせて、次のコマンドを記述します。

print([k for k, v in collections.Counter(l).items() if v > 1])
# [1, 2, 3]

リストの重複要素を取得する | sorted() 関数

collections.Counter() 関数は Python3.7 から使用されたばかりなので、Pythonで sorted() 関数を使用してPython リストで重複を取得する古い方法があります。

たとえば、上記のリストでは、次のように sorted() で一致する要素を取得します。

import collections

l = [1, 2, 1, 2, 5, 3, 4, 2, 3]
c = collections.Counter(l)
print(sorted([k for k, v in collections.Counter(l).items() if v > 1], key=l.index))
#>> [1, 2, 3]

尚、これらの要素を重複して取得したい場合は、次のようにコードを少し変更できます。

import collections

l = [1, 2, 1, 2, 5, 3, 4, 2, 3]
c = collections.Counter(l)

print([x for x in l if cc[x] > 1])
#>> [1, 2, 1, 2, 3, 2, 3]

Pythonで2次元リストの重複要素を取得する

Python で 2 次元リストの重複要素を取得するには、Couter() または sorted() を使用できないため、この問題を解決するために自己作成関数を作成する必要があります。

たとえば、次のような 2 次元リストがあります。

l = [[1, 2], [0, 1], [0, 1], [0, 0], [1, 0], [1, 2], [1, 2]]

上記の 2 次元リストで重複要素を取得する関数を次のように作成します。

元の順序を維持せずに python で 2 次元リストで重複要素を取得

def get_duplicate_list(l):
seen = []
return [x for x in l if not seen.append(x) and seen.count(x) == 2]

l = [[1, 2], [0, 1], [0, 1], [0, 0], [1, 0], [1, 2], [1, 2]]

print(get_duplicate_list(l))
#>> [[0, 1], [1, 2]]

元の順序を維持して、Pythonの2次元リストで重複要素を取得。

    seen = []
return [x for x in l if l.count(x) > 1 and not seen.append(x) and seen.count(x) == 1]

l = [[1, 2], [0, 1], [0, 1], [0, 0], [1, 0], [1, 2], [1, 2]]

print(get_duplicate_list_order(l))
#>> [[1, 2], [0, 1]]

まとめ

上記 Kiyoshi は、既にPython リスト内の重複要素をチェックして取得する方法を示しました。レッスンの内容をよりよく理解するために、今日の例を書き直す練習をしてください。

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

URL Link

https://laptrinhcanban.com/ja/python/nhap-mon-lap-trinh-python/list-trong-python/kiem-tra-va-lay-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.