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

Python リストから連続する重複要素を効率的に削除するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-01 09:37:09
オリジナル
505 人が閲覧しました

How Can I Efficiently Remove Consecutive Duplicate Elements from a Python List?

連続重複のある要素の削除

データ処理における一般的なタスクは、リストから連続重複を削除することです。単純な Python 実装は次のようになります。

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
    else:
        i = i+1
ログイン後にコピー

このアプローチでは、繰り返される要素が削除され、[1, 2, 3, 4, 5, 1, 2] のような出力が得られます。

値が連続して繰り返される要素を削除する

ただし、改善された目標は次のとおりです。値が連続して繰り返される要素全体を削除すると、[2, 3, 5, 1, 2] のような出力が得られます。以前のアプローチは変更できます。

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0
dupe = False

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
        dupe = True
    elif dupe:
        del list[i]
        dupe = False
    else:
        i += 1
ログイン後にコピー

このアプローチは機能しますが、簡素化することもできます。

よりエレガントなソリューション

Python はさらに多くの機能を提供しますリスト操作のための表現力豊かなツール。 itertools.groupby を使用する:

L = [1,1,1,1,1,1,2,3,4,4,5,1,2]
from itertools import groupby
[key for key, _group in groupby(L)]
ログイン後にコピー

これにより、目的の出力が得られます: [1, 2, 3, 4, 5, 1, 2].

タスクの 2 番目の部分の場合:

[k for k, g in groupby(L) if len(list(g)) < 2]
ログイン後にコピー

これは、groupby を使用して連続する重複をグループ化し、複数の要素を持つグループをフィルターで除外し、効果的に重複した要素。

必要に応じて、ジェネレーター式を使用して一時リストの作成を回避できます。

[k for k, g in groupby(L) if sum(1 for i in g) < 2]
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート