리스트 안에서 특정 리스트의 모든 요소를 포함하는 행을 찾아야 하는 경우가 있습니다. 이럴 때는 플래그(flag) 변수와 간단한 반복문, 그리고 append 메서드를 활용하면 손쉽게 해결할 수 있습니다.
예제
다음은 실제 구현 예시입니다.
my_list = [[8, 6, 3, 2], [1, 6], [2, 1,7], [8, 1, 2]]
print("리스트 출력 :")
print(my_list)
sub_list = [1, 2]
result = []
for row in my_list:
flag = True
for element in sub_list:
if element not in row:
flag = False
if flag:
result.append(row)
print("결과 리스트 :")
print(result)출력 결과
리스트 출력 : [[8, 6, 3, 2], [1, 6], [2, 1, 7], [8, 1, 2]] 결과 리스트 : [[2, 1, 7], [8, 1, 2]]
코드 설명
먼저 리스트 안에 여러 개의 리스트(행)가 담긴 중첩 리스트를 정의하고, 콘솔에 출력합니다.
찾고자 하는 기준이 되는 정수 값들로 이루어진 별도의 리스트(
sub_list)를 정의합니다.조건에 맞는 행을 담아둘 빈 리스트(
result)를 준비합니다.중첩 리스트를 하나씩 순회하면서 각 행마다 플래그 값을
True로 초기화합니다.sub_list의 각 요소를 검사하면서, 해당 요소가 현재 행에 존재하지 않으면 플래그 값을False로 변경합니다.반복이 끝난 뒤 플래그 값을 기준으로 결과를 판별합니다.
플래그 값이
True, 즉 모든 요소를 포함하는 행이라면 빈 리스트에append메서드로 추가합니다.마지막으로 조건을 만족하는 행들만 담긴 결과 리스트를 콘솔에 출력합니다.
참고: 더 간단한 방법
위 코드는 집합(set) 자료형을 사용하면 더욱 간결하게 작성할 수도 있습니다.
result = [row for row in my_list if set(sub_list).issubset(set(row))]
이처럼 issubset 메서드를 활용하면 반복문 없이 한 줄로 동일한 결과를 얻을 수 있어, 코드의 가독성과 효율성을 동시에 높일 수 있습니다.