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

python

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

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

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

本記事の内容

  • 1.pythonでlistの重複要素を削除する
  • 2.listのlistはsetに変換できない
  • 3.listのlist内の各要素に対して重複を削除する
  • 4.データ構造をsetからlistに戻す
  • 5.重複削除後、要素の順序を引き継ぐ

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

一方、金融業界では未だに生産性の低いCOBOLやアセンブラなども使われています。一般に給料が高い金融業界でなぜ古く非効率な言語が使われているのか、興味のある方はこちらの記事をご覧ください。

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

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

【未経験もOK】Pythonエンジニアとしてフリーランス向け案件に興味のある方へ


Pythonエンジニアとしてフリーランスの高額案件を探している方へ
フリーランス案件を受注するなら、平均年収819万円を誇るエミリーエンジニアが
おすすめです。listをuniqueにする方法を調べるPythonエンジニアのための案件紹介

【3つのポイント】

  • ①フリーランス案件に興味のある方や初めて受注を目指す方も歓迎です
  • ②初心者向けに税務などのアドバイスも受けられます
  • ③利用料は一切かかりません

それでは、本題に戻ります。

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から重複要素を削除する方法を解説しました。参考になりましたら幸いです。

今、ITエンジニアは前例のない売り手市場です

ITエンジニアは前例のない売り手市場、転職なら今

現在のエンジニアの求人数と求人倍率をご存知ですか?

直近(※)のIT業界全体の求人倍率は7.85倍です。

つまり 企業が8回 IT人材の求人を出しても、 1人しかエントリーがない 状況です。

エンジニア側が企業を選ぶ なら、今がチャンスです。

※転職サイトdodaが毎月発表している転職求人倍率。
 2019年12月9日発表/集計対象期間は2019年11月1日〜30日

詳しくはこちら


人気記事【今年の抱負】退職しオープン&フリー&シンプルに生きていく【失敗しない働き方改革の本質】