>백엔드 개발 >파이썬 튜토리얼 >Python 목록에서 연속 숫자 그룹을 식별하는 방법은 무엇입니까?

Python 목록에서 연속 숫자 그룹을 식별하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-20 15:11:10714검색

How to Identify Consecutive Number Groups in Python Lists?

연속 숫자 그룹 식별

Python에서는 내장된 itertools.groupby( ) 기능. 작동 방식은 다음과 같습니다.

itertools.groupby() 함수

groupby() 함수는 키 함수를 기반으로 iterable의 요소를 그룹화합니다. 이 경우 요소의 인덱스와 해당 값 간의 차이를 계산하는 키 함수를 정의합니다. 연속된 숫자는 동일한 키를 가지므로 그룹화됩니다.

코드 구현:

샘플 목록 [2, 3, 4, 5, 12, 13]을 고려하세요. , 14, 15, 16, 17, 20]. 아래 코드는 연속된 숫자 그룹을 식별하기 위해 groupby()를 활용합니다:

from itertools import groupby
from operator import itemgetter

data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]
ranges = []

for k, g in groupby(enumerate(data), lambda (i, x): i - x):
    group = map(itemgetter(1), g)
    if len(group) > 1:
        ranges.append(tuple(group[0], group[-1]))
    else:
        ranges.append(group[0])

주요 함수 이해:

람다 함수(lambda (i, x): i - x)는 요소의 인덱스(i)와 값(x) 간의 차이를 계산합니다. 이 차이를 통해 연속된 숫자를 그룹화할 수 있습니다. 예를 들어, 숫자 2의 차이는 0이고, 숫자 12의 차이는 10입니다.

그룹화된 요소 처리:

각 요소에 대해 key(차이), groupby()는 해당 그룹화된 요소를 포함하는 생성기 객체(g)를 생성합니다. 이 생성기를 map() 및 itemgetter()를 사용하여 목록으로 변환하여 요소 값만 추출합니다.

결과 필터링 및 추가:

길이를 확인합니다. 연속된 숫자를 나타내는 1보다 큰지 확인하기 위한 그룹화된 요소입니다. 그렇다면 그룹의 첫 번째 요소와 마지막 요소의 튜플을 범위 목록에 추가합니다. 개별 숫자의 경우 숫자 자체를 추가합니다.

출력:

범위 목록에는 다음과 같은 연속 숫자 그룹이 포함됩니다.

[(2, 5), (12, 17), 20]

위 내용은 Python 목록에서 연속 숫자 그룹을 식별하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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