복붙노트

[PYTHON] 목록에서 연속 된 중복을 식별하는 가장 Pythonic 한 방법은 무엇입니까?

PYTHON

목록에서 연속 된 중복을 식별하는 가장 Pythonic 한 방법은 무엇입니까?

나는 정수의 목록을 가지고 있고 중복 된 블록을 식별 할 수 있기를 바란다 : 즉, 나는 각 duples이 포함하는 duple의 순서 보존 목록을 생성하려고한다 (int_in_question, 발생 횟수).

예를 들어 다음과 같은 목록이있는 경우 :

[0, 0, 0, 3, 3, 2, 5, 2, 6, 6]

나는 그 결과를 원한다.

[(0, 3), (3, 2), (2, 1), (5, 1), (2, 1), (6, 2)]

for-loop, temp, counter를 사용하여이 작업을 수행하는 방법은 매우 간단합니다.

result_list = []
current = source_list[0]
count = 0
for value in source_list:
    if value == current:
        count += 1
    else:
        result_list.append((current, count))
        current = value
        count = 1
result_list.append((current, count))

하지만 파이썬의 함수 프로그래밍 관용구가 정말 마음에 들었습니다. 간단한 생성기 식으로이 작업을 수행하고 싶습니다. 그러나 발전기로 작업 할 때는 서브 카운트를 유지하기가 어렵습니다. 나는 2 단계 과정이 나를 거기로 데려다 줄 수 있다고 느끼지만, 당분간 나는 혼란 스럽다.

특히 발전기를 사용할 때이 작업을 수행하는 데 특히 우아하고 비단뱀적인 방법이 있습니까?

해결법

  1. ==============================

    1.

    >>> from itertools import groupby
    >>> L = [0, 0, 0, 3, 3, 2, 5, 2, 6, 6]
    >>> grouped_L = [(k, sum(1 for i in g)) for k,g in groupby(L)]
    >>> # Or (k, len(list(g))), but that creates an intermediate list
    >>> grouped_L
    [(0, 3), (3, 2), (2, 1), (5, 1), (2, 1), (6, 2)]
    

    배터리는 포함되어 있습니다.

    JBernardo에서 합계 및 생성자 표현을 사용하기위한 제안. 의견을 참조하십시오.

  2. from https://stackoverflow.com/questions/6352425/whats-the-most-pythonic-way-to-identify-consecutive-duplicates-in-a-list by cc-by-sa and MIT license