ホームページ  >  記事  >  バックエンド開発  >  知っておくべきPythonリストの重複排除方法

知っておくべきPythonリストの重複排除方法

高洛峰
高洛峰オリジナル
2017-02-21 10:50:182239ブラウズ

前書き

リストの重複排除は、Python スクリプトを作成するときによくある問題です。ソース データがどこから来たのかに関係なく、それをリストに変換すると、期待される結果が最も一般的な最終結果ではない可能性があるためです。はリストです。重複した要素があるため、最初に重複を削除する必要があります。

Python の組み込みデータ型セットを使用する、最も簡単な方法から始めましょう。

リストのデータが次のようなものであるとします。

level_names = [
 u'Second Level',
 u'Second Level',
 u'Second Level',
 u'First Level',
 u'First Level'
]

セットの要素は繰り返すことができないため、リストをセットに変換すると、繰り返しの要素は自動的に削除されます。これが基本原則です。コードは次のとおりです:

>>> the_list = set(level_names)
>>> print(the_list)
set([u'Second Level', u'First Level'])

このメソッドの欠点は、リストに変換するときに以前のリストの順序を保存できないことです。そのような要件がない場合、この方法が最も簡単な答えだと思うかもしれません。これは非常に技術的ではありませんか? はい、リストから重複を削除するように求める一般的な面接の質問では、通常次のように書きます:

リストから重複を削除する方法を書き留めてください。 (セットは使用できません)

人々はそれが使用できないことを示しています セットされているため、時々このトリックがまだ機能しないことがあります。もちろん、それは私たちを悩ませるものではありません、私たちは他の方法を持っています。

リストを走査できることは誰もが知っており、走査できれば問題は単純になります。次に、空のリストを定義し、データを含むリストを走査し、空でない場合は再度走査するときに判定を追加します。コードは次のとおりです:

the_list = []
for level in level_names:
 if level not in the_list:
  the_list.append(level)
print(the_list)

ただし、この方法は通常の小さなリストには問題ありませんが、非常に大きなリストの場合、the_list リストが非常に大きくなり、インデックス順にリストを検索するため、判定の効率に影響し、量が増えると速度が低下するため、やりたいことができなくなります。データが大きいです。

大きなリストに出会ったらどうすればいいのかと聞きたいかもしれません。 もっと素晴らしい方法はありますか?もちろん、判断するときにリストを使用すると効率に影響するため、考えを変えてセットを使用しましょう。値を検索するときにセットで使用されるハッシュ関数があるからです。セットは順序付けされておらず、位置は固定されています。特定の要素が存在するかどうかを確認するのに 1 回しかかかりません。同じデータ条件でリストとセットの要素を検索するのに 16 分かかりました。 set を使用するのに 52 秒かかります。この比較から効果がわかります。他に言うことはありません。コードを投稿してください。 PHP中国語サイトに注目!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。