5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonのリストから、順番を守ったまま重複を削除する

Last updated at Posted at 2019-03-04

Introduction

ここにPythonの配列

>>> script = ['Python', 'Ruby', 'Perl', 'Python', 'JavaScript']

あります。ここから順番は守りつつ、重複を削除したい場合、どのようなスクリプトが必要でしょうか、というのが今回のお題です。今回の場合、最終的に['Python', 'Ruby', 'Perl', 'JavaScript']というリストを得るのが目的です。

重複を取り除くならsetを使えばよいのでは?

setは集合演算を行うことができるデータ型です。listをset型に変換したい場合は以下のようにset関数を用います。

>>> set(script)

実行結果は以下のようになります。

{'Perl', 'Python', 'JavaScript', 'Ruby'}

setは集合演算を行うデータ型であるため、順番を気にしません。よってset関数のみでは、重複を取り除くところまでしか達成できません。

set + sorted、そしてkey=.index

ズバリ答えを言ってしまうとsorted関数を使います。ただし、sorted関数の引数であるkeyに.index()を指定するのが、今回の味噌です。

.index()は引数に指定したものが、どの要素にいるかを前方一致で返します。つまり'Python'の文字列の場合には

>>> script.index('Python')
0

のように左から検索して最初に出くわした要素数である0を返します。これをsorted関数のkeyに選択してあげます。

最終的なスクリプトと、その出力結果は以下のようになります。

>>> sorted(set(script), key=script.index)
['Python', 'Ruby', 'Perl', 'JavaScript']

期待通りの結果を得ることができました。

5
4
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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?