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

Python – 튜플 리스트에서 연속된 요소만 필터링하는 방법

튜플로 구성된 리스트에서 요소가 연속적으로 증가하는 튜플만 골라내야 하는 경우가 있습니다. 이럴 때는 튜플 리스트를 매개변수로 받아 각 튜플의 인덱스를 검사하고, 검사 결과에 따라 불리언(Boolean) 값을 반환하는 함수를 정의하면 손쉽게 해결할 수 있습니다.

예제 코드

아래는 실제 구현 예시입니다.

print("Method definition begins...")
def check_consec_tuple_elem(my_tuple):
    for idx in range(len(my_tuple) - 1):
        if my_tuple[idx + 1] != my_tuple[idx] + 1:
            return False
    return True
print("Method definition ends...")
my_tuple = [(23, 24, 25, 26), (65, 66, 78, 29), (11, 28, 39), (60, 61, 62, 63)]

print("The list of tuple is : " )
print(my_tuple)

my_result = []

for elem in my_tuple:
    if check_consec_tuple_elem(elem):
        my_result.append(elem)

print("The resultant tuple is : ")
print(my_result)

출력 결과

Method definition begins...
Method definition ends...
The list of tuple is :
[(23, 24, 25, 26), (65, 66, 78, 29), (11, 28, 39), (60, 61, 62, 63)]
The resultant tuple is :
[(23, 24, 25, 26), (60, 61, 62, 63)]

코드 설명

  • 'check_consec_tuple_elem'이라는 이름의 함수를 정의하며, 이 함수는 하나의 튜플을 매개변수로 받습니다.

  • 함수는 튜플을 순회하면서 현재 인덱스의 요소와 다음 인덱스의 요소가 1씩 차이 나는지, 즉 연속적인 값인지 확인합니다.

  • 연속되지 않은 요소가 발견되면 즉시 False를 반환합니다.

  • 모든 요소가 연속적이라면 True를 반환합니다.

  • 함수 외부에서 튜플 리스트를 정의하고 콘솔에 출력합니다.

  • 필터링된 결과를 저장할 빈 리스트를 생성합니다.

  • 튜플 리스트를 순회하면서 각 튜플을 함수에 전달해 호출합니다.

  • True를 반환한 튜플만 결과 리스트에 추가(append)합니다.

  • 최종 결과 리스트를 콘솔에 출력합니다.

더 간결한 대안: all() 함수 활용

위 로직은 파이썬의 내장 함수 all()zip()을 조합하면 한 줄로 더 간결하게 표현할 수도 있습니다.

def check_consec_tuple_elem(my_tuple):
    return all(b == a + 1 for a, b in zip(my_tuple, my_tuple[1:]))

zip(my_tuple, my_tuple[1:])은 인접한 두 요소를 짝지어 주고, all()은 모든 쌍이 '다음 요소 = 현재 요소 + 1' 조건을 만족하는지 한 번에 검사합니다. 조건을 모두 만족하면 True, 하나라도 어긋나면 False를 반환하므로 앞서 작성한 반복문 기반 함수와 동일하게 동작합니다.