Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 리스트에 연속된 숫자가 포함되어 있는지 확인하는 방법

데이터 분석 작업을 하다 보면 파이썬 데이터 컨테이너 안에 연속적인 숫자들이 들어 있는지 확인해야 하는 경우가 종종 있습니다. 이 글에서는 리스트의 요소들 중 연속된 숫자가 존재하는지 판별하는 두 가지 방법을 소개합니다.

방법 1: sorted와 range 함수 활용

sorted 함수를 사용하면 리스트의 요소들을 오름차순으로 정렬할 수 있습니다. 이후 min과 max 함수로 리스트의 최솟값과 최댓값을 구하고, range 함수를 이용해 해당 범위의 숫자 목록을 생성합니다. 마지막으로 정렬된 리스트와 생성한 범위 리스트를 비교하여 두 값이 완전히 일치하면 리스트에 연속된 숫자가 있다고 판단할 수 있습니다.

예제 코드

listA = [23,20,22,21,24]
sorted_list = sorted(listA)
range_list = list(range(min(listA), max(listA)+1))
if sorted_list == range_list:
    print("listA has consecutive numbers")
else:
    print("listA has no consecutive numbers")

# 다시 확인
caseB = [23,20,13,21,24]
sorted_list = sorted(caseB)
range_list = list(range(min(caseB), max(caseB)+1))
if sorted_list == range_list:
    print("caseB has consecutive numbers")
else:
    print("caseB has no consecutive numbers")

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

listA has consecutive numbers
caseB has no consecutive numbers

listA는 정렬했을 때 20부터 24까지 빠짐없이 이어지므로 연속된 숫자를 포함하고 있지만, caseB는 중간에 13이라는 값이 있어 범위 리스트와 일치하지 않기 때문에 연속된 숫자가 없는 것으로 판별됩니다.

방법 2: NumPy의 diff 함수와 sorted 활용

NumPy의 diff 함수는 정렬된 숫자들 사이의 차이값을 계산해 줍니다. 모든 숫자가 연속적이라면 각 차이값은 항상 1이 되고, 따라서 차이값들의 합은 리스트 길이에서 1을 뺀 값과 같아집니다. 이 성질을 이용하면 연속 여부를 손쉽게 확인할 수 있습니다.

예제 코드

import numpy as np
listA = [23,20,22,21,24]

sorted_list_diffs = sum(np.diff(sorted(listA)))
if sorted_list_diffs == (len(listA) - 1):
    print("listA has consecutive numbers")
else:
    print("listA has no consecutive numbers")

# 다시 확인
caseB = [23,20,13,21,24]
sorted_list_diffs = sum(np.diff(sorted(caseB)))
if sorted_list_diffs == (len(caseB) - 1):
    print("caseB has consecutive numbers")
else:
    print("caseB has no consecutive numbers")

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

listA has consecutive numbers
caseB has no consecutive numbers

정리

두 방법 모두 리스트를 먼저 정렬한 뒤 연속성을 검사한다는 공통점이 있습니다. 외부 라이브러리 없이 표준 함수만으로 해결하고 싶다면 첫 번째 방법이 적합하고, 이미 NumPy를 사용 중인 데이터 분석 환경이라면 두 번째 방법이 더 간결하고 효율적입니다. 상황에 맞게 선택하여 사용하시기 바랍니다.