튜플로 구성된 리스트에서 요소가 연속적으로 증가하는 튜플만 골라내야 하는 경우가 있습니다. 이럴 때는 튜플 리스트를 매개변수로 받아 각 튜플의 인덱스를 검사하고, 검사 결과에 따라 불리언(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를 반환하므로 앞서 작성한 반복문 기반 함수와 동일하게 동작합니다.