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

파이썬 – 하위 리스트의 모든 요소를 포함하는 행 찾기

리스트 안에서 특정 리스트의 모든 요소를 포함하는 행을 찾아야 하는 경우가 있습니다. 이럴 때는 플래그(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 메서드를 활용하면 반복문 없이 한 줄로 동일한 결과를 얻을 수 있어, 코드의 가독성과 효율성을 동시에 높일 수 있습니다.