리스트 안의 여러 튜플이 모두 동일한 값(단일 요소)만 담고 있는지 확인해야 하는 경우가 있습니다. 이럴 때 플래그(flag) 변수와 중첩 반복문을 활용하면 손쉽게 검사할 수 있습니다.
예제 코드
다음은 튜플 목록에 단일 요소만 포함되어 있는지 테스트하는 예제입니다.
my_list = [(72, 72, 72), (72, 72), (72, 72)]
print('리스트는 다음과 같습니다:')
print(my_list)
my_result = True
for sub in my_list:
flag = True
for element in sub:
if element != my_list[0][0]:
flag = False
break
if not flag:
my_result = False
break
if my_result:
print('모든 튜플이 단일 요소만 포함합니다')
else:
print('단일 요소가 아닌 값이 존재합니다')
출력 결과
리스트는 다음과 같습니다: [(72, 72, 72), (72, 72), (72, 72)] 모든 튜플이 단일 요소만 포함합니다
코드 설명
- 먼저 여러 개의 튜플을 담은 리스트를 정의하고 콘솔에 출력합니다.
- 검사 결과를 저장할 변수
my_result를True로 초기화합니다. - 바깥쪽 반복문으로 리스트의 각 튜플을 순회하며, 매번 내부 플래그를
True로 설정합니다. - 안쪽 반복문에서 튜플의 각 요소를 첫 번째 튜플의 첫 번째 요소(
my_list[0][0])와 비교하여, 다른 값이 발견되면 플래그를False로 바꾸고 즉시 반복을 종료합니다. - 플래그가
False가 되면my_result역시False로 변경된 뒤 전체 반복문을 빠져나옵니다. - 마지막으로
my_result가True라면 모든 튜플이 동일한 값만 가진다는 의미이며, 검사 결과에 맞는 메시지를 콘솔에 출력합니다.
더 간결한 방법: all() 함수 활용
중첩 반복문 대신 제너레이터 표현식과 all() 함수를 사용하면 위 로직을 한 줄로 줄일 수 있습니다.
my_list = [(72, 72, 72), (72, 72), (72, 72)] result = all(element == my_list[0][0] for sub in my_list for element in sub) print(result) # True
all()은 주어진 조건이 모두 참일 때만 True를 반환하므로, 별도의 플래그 변수 없이도 동일한 검사를 간결하게 수행할 수 있습니다.