【python】listをuniqueにする方法【重複要素の削除】

python

pythonでlistをuniqueにする方法を調べる人

pythonでlistの重複要素を削除したい人
「例えば[1,1,2,2][1,2]というように、pythonでlistから重複要素を削除したいです。どのように記述すればいいでしょうか?わかりやすく具体的な例と、コピペできるソースコードが欲しいです。」

こんな疑問を解決します。

本記事の内容

この記事を書いている私はIT業界歴12年、年収1,000万円ちょっとの金融エンジニアです。学生時代から様々なプログラミング言語を扱ってきましたが、その中でもpythonはとても扱いやすく生産性も高く、オススメの言語です。

本記事では、listをuniqueにする方法を解説します。set関数を用いて、データ構造をlistからsetに変換する方法を紹介します。

具体例を示し、細かい構文に迷ったときにコピー&ペーストして使えることも目指しました。少しでもお役に立てますと幸いです。
す。

1.pythonでlistの重複要素を削除する

構文

簡単な例

listをsetに変換することで重複要素を削除することができます。これは、setが要素の重複を許さないデータ構造だからです。

>>> #整数の重複リスト
>>> [1,1,2,2,3,3,4,5] 
[1,1,2,2,3,3,4,5]

>>> #listをsetに変換して重複を削除する
>>> set([1,1,2,2,3,3,4,5])
{1, 2, 3, 4, 5}

>>> #文字列の重複リスト
>>> ['a', 'a', 'b', 'b', 'c']

>>> #listをsetに変換して重複を削除する
>>> set(['a', 'a', 'b', 'b', 'c'])
{'b', 'c', 'a'}

>>> #整数と文字列のリスト
>>> [1,1,'x','x']
[1, 1, 'x', 'x']

>>> #listをsetに変換して重複を削除する
>>> set([1, 1, 'x', 'x'])
{1, 'x'}

 

2.listのlist(入れ子)はsetに変換できない

listのlistはsetに変換できない

setに変換しようとすると、以下のようにエラーになってしまいます。

>>> #整数リストのリスト
>>> [[9,9],[],[],[9,9]]
[[9, 9], [], [], [9, 9]]

>>> #listをsetに変換して重複を削除する
>>> set([[9, 9], [], [], [9, 9]])
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: 'list'

 

代替策

listのlistをtupleのlistに変換してからsetに変換します

>>> #listをtupleに変換する
>>> list(map(tuple,[[9, 9], [], [], [9, 9]]))
[(9, 9), (), (), (9, 9)]

>>> #これでsetに変換して重複を削除できます。
>>> set(list(map(tuple,[[9, 9], [], [], [9, 9]])))
{(), (9, 9)}

3.listのlist内の各要素に対して重複を削除する

listのlist内の各要素に対して重複を削除するには、二重のlist構造のうちの内側のlist構造を排除(flatten)してからsetに変換します

>>> #sum関数を使って内側のlist構造を削除する(flatten)
>>> sum([[9, 9], [], [], [9, 9]],[])
[9, 9, 9, 9]

>>> #これでsetに変換して重複を削除できます。
>>> set(sum([[9, 9], [], [], [9, 9]],[]))
{9}

4.データ構造をsetからlistに戻す

重複を削除したら、データ構造をsetからlistに戻すことも可能です。list関数を用いてlistに変換します。

>>> #listをsetに変換して重複を削除する
>>> list(set(['a', 'a', 'b', 'b', 'c']))
['b', 'c', 'a']
>>> list(set([1, 1, 'x', 'x']))
[1, 'x']

5.重複削除後、要素の順序を引き継ぐ

setには重複の概念だけでなく順序の概念もありません。setに変換してしまうと順序が失われてしまいます。これを避ける方法を解説します。

>>> #あらかじめ変数にlistを代入しておく
>>> lst=['a', 'a', 'b', 'b', 'c']

>>> 重複を削除したら、lstの順序(lst.index)を用いてソートし直す
>>> sorted(list(set(lst)),key=lst.index)
['a', 'b', 'c']

 
今回は以上です。listから重複要素を削除する方法を解説しました。参考になりましたら幸いです。

pythonは自動車、半導体メーカーなどでも使われています

 

なぜCOBOLが使われているのか
Pythonはプログラミングしやすく、高効率な言語と言えます。一方で、金融業界では未だに生産性の低いCOBOLやアセンブラなども使われています。一般に給料が高い金融業界でなぜ古く非効率な言語が使われているのでしょうか?詳しくはこちらの記事をご覧ください。