1
2

Python小技集 - #1 リスト/タプルから重複要素を削除する方法

Last updated at Posted at 2022-08-12

こんにちは!beatbox4108です。
今日はPythonでリスト/タプルから重複要素を削除する方法について説明していきます。
方法は2種類あります。

  • setを使う方法
  • dictを使う方法
    • dict+zip (応用)

setを使う場合

Pythonには重複しない値の集合であるsetがあります。
ふつうはこれを使うのが良いでしょう。

l=[1,1,2,3,3,3,5,6,6,9,0] # サンプル

# setを使う場合
a=list(set(l))
print("setを使う場合:",a)
setを使う場合: [0, 1, 2, 3, 5, 6, 9]

アンパックを使えばもっと簡潔に書けます。

l=[1,1,2,3,3,3,5,6,6,9,0] # サンプル

# setを使う場合(別解)
b=[*{*l}]
print("setを使う場合 (別解):",b)
setを使う場合 (別解): [0, 1, 2, 3, 5, 6, 9]

この手法はリストの順番を考慮しません。自然にソートされます。
順番を考慮したい場合は次項のdict.fromkeysを使ってください。

dict.fromkeysを使う場合

辞書のキーが重複しないことを利用した手法です。
順序を維持します。

l=[1,1,2,3,3,3,5,6,6,9,0] # サンプル

# dict.fromkeys を使う場合
c=list(dict.fromkeys(l))
print("dict.fromkeysを使う場合:",c)
dict.fromkeysを使う場合: [1, 2, 3, 5, 6, 9, 0]

こちらもアンパックを使えますが、あまり簡潔になった感じがしません...

l=[1,1,2,3,3,3,5,6,6,9,0] # サンプル

# dict.fromkeysを使う場合(別解)
d=[*dict.fromkeys(l)]
print("dict.fromkeysを使う場合(別解):",d)
dict.fromkeysを使う場合(別解): [1, 2, 3, 5, 6, 9, 0]

この手法でもバージョンによっては順番が維持されません。
OrderedDictを代わりに使用できます。

from collections import OrderedDict

dict+zip

さっきの応用で、dict関数にzip関数をかませて、上記と同様のことを行います。

l=[1,1,2,3,3,3,5,6,6,9,0] # サンプル

# dict+zipを使う場合
e=[*dict(zip(l,l))]
print("dict+zipを使う場合:",e)
dict+zipを使う場合: [1, 2, 3, 5, 6, 9, 0]

書く量は少ししか減らせなかったのに、可読性が落ちたような...

これ以上アンパックは使えません。無念。


いかがだったでしょうか?
これからも気が向いたらこんな小技を紹介していきたいと思っているのでよろしくお願いします!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2