ホームページ >バックエンド開発 >Python チュートリアル >Python で一意の要素を保持しながら、連続する重複をリストから効率的に削除するにはどうすればよいでしょうか?

Python で一意の要素を保持しながら、連続する重複をリストから効率的に削除するにはどうすればよいでしょうか?

DDD
DDDオリジナル
2024-12-11 19:12:12118ブラウズ

How Can We Efficiently Remove Consecutive Duplicates from a List While Preserving Unique Elements in Python?

連続する重複の削除と個別の要素の保持

リストを操作する場合、多くの場合、連続する重複要素を削除する必要があります。疑問が生じます: 個別の要素を保持しながら、そのような要素を効率的に削除するにはどうすればよいでしょうか?

1 つのアプローチは、リストを反復処理して、各要素を後続要素と比較することです。それらが同一である場合、現在の要素を削除します。このメソッドは機能しますが、比較的非効率で、Python の優雅さに欠けています。

GroupBy を使用したエレガントな重複の削除

Python itertools モジュールには、groupby と呼ばれる強力な関数が用意されています。連続した要素を効率的にグループ化できます。 groupby を利用することで、コード行を減らし、明確さを高めて目標を達成できます。

質問の最初の部分 (一意の要素を見つける) では、groupby を使用して連続する要素をグループ化し、キーを選択します。 (固有の要素を表します)。

from itertools import groupby

L = [1,1,1,1,1,1,2,3,4,4,5,1,2]
unique_elements = [key for key, _group in groupby(L)]

出力:

[1, 2, 3, 4, 5, 1, 2]

保持Sum

を使用した個別の要素 ソリューションをさらに改良するには、連続した重複を持つ要素を削除する必要があります。ここでも groupby が助けてくれます。各グループの長さをチェックすることで、要素が個別であるかどうかを判断できます。

distinct_elements = [k for k, g in groupby(L) if len(list(g)) < 2]

出力:

[2, 3, 5, 1, 2]

あるいは、ジェネレータ式を使用して、要素の作成を避けることもできます。各グループの一時リストを作成し、代わりにジェネレーターの合計を計算します:

distinct_elements = [k for k, g in groupby(L) if sum(1 for i in g) < 2]

これにより、ソリューションのよりコンパクトで効率的な実装が提供されます。個別の要素を保持しながら、連続する重複を効果的に排除します。

以上がPython で一意の要素を保持しながら、連続する重複をリストから効率的に削除するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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