Pythonのリストから重複を削除する

Pythonのリストから重複を削除する方法はたくさんあります。

  • Using a temporary List and Looping
  • Using set() built-in method
  • Using Dictionary Keys
  • List count() function
  • List Comprehension

リストから重複を削除する。

Pythonのリストは重複要素を含んでいることがあります。さまざまな方法で重複要素を削除する例を見てみましょう。

一時的なリストを使用する

これは、リストから重複した要素を削除するための力ずくの方法です。一時的なリストを作成し、重複していない要素のみを追加します。

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

temp = []

for x in ints_list:
    if x not in temp:
        temp.append(x)

ints_list = temp

print(f'Updated List after removing duplicates = {temp}')

出力:重複を除いた更新されたリスト=[1、2、3、4] 推奨される読み物:Pythonのf-strings

2. set() 関数

Pythonのセットは重複する要素を持っていません。リストをセットに変換するために組み込みのset()関数を使用し、その後、list()関数を使用して再度リストに変換することができます。

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

ints_list1 = list(set(ints_list))
print(ints_list1)  # [1, 2, 3, 4]

3. 辞書のキーとして要素をリスト化する。

私たちは、辞書のキーが一意であることを知っています。dictクラスにはfromkeys()関数があり、この関数はイテラブルを受け入れて辞書を作成する際に、そのイテラブルからキーを取得します。

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

ints_list2 = list(dict.fromkeys(ints_list))
print(ints_list2)  # [1, 2, 3, 4]

4.count()関数の一覧 – 推奨しない

リストのcount()メソッドは、値の出現回数を返します。そのメソッドをremove()メソッドと組み合わせることで、リストから重複する要素を削除することができます。

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

for x in ints_list:
    if ints_list.count(x) > 1:
        ints_list.remove(x)
print(ints_list)  # [1, 2, 3, 4]

注意:下記のコメントで指摘されているように、同じイテレータから要素を削除する際にcount()関数を使用することは望ましくありません。これは望ましくない結果を引き起こす可能性があります。例えば:

values = [87, 94, 45, 94, 94, 41, 65, 94, 41, 99, 94, 94, 94]

for x in values:
    if values.count(x) > 1:
        values.remove(x)
print(values)  # [87, 45, 65, 41, 99, 94, 94] - 94 is still present twice

5.リスト内包表記

イテラブルからリスト内包表記を使ってリストを作成することができます。このテクニックは、一時リストとforループを使用して重複要素を削除するのと同じですが、コードの行数を減らすことができます。

int_list = [1, 2, 3, 4, 3, 2]
temp = []
[temp.append(x) for x in ints_list if x not in temp]
print(temp)  # [1, 2, 3, 4]

リストから重複を削除する最善の方法

重複した要素が必要ない場合は、Setを使用するべきです。しかし、リストから重複した値を削除する必要がある場合は、count()関数を使用することをおすすめします。なぜなら、別の一時的なセットやリストオブジェクトを作成しないため、よりメモリ効率的だからです。

コメントを残す 0

Your email address will not be published. Required fields are marked *


广告
広告は10秒後に閉じます。
bannerAds