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

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

Susan Sarandon
풀어 주다: 2024-12-08 17:47:11
원래의
711명이 탐색했습니다.

How to Identify and Group Consecutive Numbers in a Python List?

목록에서 연속 숫자 식별

작업은 목록을 연속 숫자 그룹으로 나누는 것입니다. 각 그룹에는 연속된 숫자만 포함되어야 합니다. 출력은 개별 숫자를 유지해야 하며 이를 범위로 결합해서는 안 됩니다.

해결책:

Python에서는 사용자 정의 키와 함께 내장된 groupby 함수를 사용할 수 있습니다. 달성하다 this:

from itertools import groupby
from operator import itemgetter

ranges = []
for key, group in groupby(enumerate(data), lambda (index, item): index - item):
    group = map(itemgetter(1), group)
    if len(group) > 1:
        ranges.append(xrange(group[0], group[-1]))
    else:
        ranges.append(group[0])
로그인 후 복사

설명:

  1. enumerate(data)는 쌍 목록을 생성하며, 각 쌍은 인덱스(0부터 시작)로 구성됩니다. 및 데이터의 해당 요소.
  2. 람다 함수(람다(인덱스, 항목): 인덱스 - 항목) 인덱스와 요소 값의 차이를 계산합니다. 이 차이는 그룹화의 키 역할을 합니다.
  3. groupby는 키를 기준으로 쌍 목록을 연속 그룹으로 분할합니다. 각 그룹에는 동일한 차이가 있는 요소가 포함되어 있습니다.
  4. 연속 숫자의 범위를 검색하려면 map(itemgetter(1), group)을 사용하여 각 그룹의 쌍을 두 번째 요소(실제 숫자)에 매핑합니다.
  5. 각 그룹에 두 개 이상의 숫자가 포함되어 있는지 확인합니다. 그렇다면 해당 숫자에 대한 범위를 생성하고 범위에 추가합니다. 그렇지 않으면 단순히 숫자를 범위에 추가합니다.

샘플 출력:

data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]
ranges = [xrange(2, 5), xrange(12, 17), 20]
로그인 후 복사

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿