>백엔드 개발 >파이썬 튜토리얼 >Python 목록에서 연속 중복 요소를 효율적으로 제거하려면 어떻게 해야 합니까?

Python 목록에서 연속 중복 요소를 효율적으로 제거하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-01 09:37:09510검색

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].

작업의 두 번째 부분:

[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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.