【python】listをuniqueにする方法【重複要素の削除】
pythonでlistの重複要素を削除したい人
「例えば[1,1,2,2]
を[1,2]
というように、pythonでlistから重複要素を削除したいです。どのように記述すればいいでしょうか?わかりやすく具体的な例と、コピペできるソースコードが欲しいです。」
こんな疑問を解決します。
本記事の内容
- 1.pythonでlistの重複要素を削除する
- 2.listのlistの重複要素を削除できない
- 3.listのlist内の各要素に対して重複を削除する
- 4.データ構造をsetからlistに戻す
- 5.重複削除後、要素の順序を引き継ぐ
この記事を書いている私は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に変換できない
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利用企業ランキング2020
Pythonエンジニア求人の特徴
Pythonエンジニア|求人企業ランキング
当ランキング利用上の注意点
Pythonはプログラミングしやすく、高効率な言語と言えます。一方で、金融業界では未だに生産性の低いCOBOLやアセンブラなども使われています。一般に給料が高い金融業界でなぜ古く非効率な言語が使われているのでしょうか?詳しくはこちらの記事をご覧ください。