連続重複のある要素の削除
データ処理における一般的なタスクは、リストから連続重複を削除することです。単純な 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 サイトの他の関連記事を参照してください。