[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.
>>> 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에서 합계 및 생성자 표현을 사용하기위한 제안. 의견을 참조하십시오.
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
'PYTHON' 카테고리의 다른 글
[PYTHON] pyplot.barh ()로 각 막대의 막대 값을 표시하는 방법? (0) | 2018.10.13 |
---|---|
[PYTHON] 기본 텐서 흐름 예제를 실행하는 중 오류가 발생했습니다. (0) | 2018.10.13 |
[PYTHON] PyPI에 패키지 업로드 실패 : 410 사라짐 (0) | 2018.10.13 |
[PYTHON] matplotlib에서 (임의의) * .otf 또는 * .ttf 글꼴을 사용하는 방법? (0) | 2018.10.13 |
[PYTHON] 파이썬에서 사용 가능한 모든 드라이브 문자를 나열하는 방법이 있습니까? (0) | 2018.10.13 |