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

Python – 복잡한 데이터 유형이 포함된 행 추출 방법

파이썬에서 리스트, 튜플, 딕셔너리, 세트처럼 복잡한 데이터 유형이 포함된 행을 추출해야 할 때는 isinstance 메서드와 리스트 컴프리헨션(list comprehension)을 조합하면 간결하게 해결할 수 있습니다.

isinstance()는 특정 객체가 지정한 자료형의 인스턴스인지 확인하는 내장 함수로, 단순히 type()으로 비교하는 것보다 상속 관계까지 고려한 유연한 타입 검사가 가능합니다.

예제 코드

아래는 중첩된 리스트에서 복잡한 데이터 유형이 들어 있는 행만 골라내는 예제입니다.

my_list = [[13, 1, 35], [23, [44, 54], 85], [66], [75, (81, 2), 29, 7]]

my_result = [row for row in my_list if any(isinstance(element, list) or isinstance(element, tuple) or isinstance(element, dict) or isinstance(element, set) for element in row)]

print("The list is :")
print(my_list)

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

출력 결과

The list is :
[[13, 1, 35], [23, [44, 54], 85], [66], [75, (81, 2), 29, 7]]
The resultant list is :
[[23, [44, 54], 85], [75, (81, 2), 29, 7]]

코드 설명

  • 리스트 안에 리스트가 중첩된 구조의 리스트를 정의한 뒤, 콘솔에 그대로 출력합니다.

  • 리스트 컴프리헨션을 사용해 전체 리스트를 순회하면서, 각 행(row)의 요소가 list, tuple, dict, set 타입에 해당하는지 isinstance 메서드로 검사합니다.

  • any() 함수 덕분에 한 행 안에 복잡한 데이터 유형이 하나라도 존재하면 해당 행이 최종 결과에 포함됩니다.

  • 조건을 만족하는 행들만 모아 새로운 리스트를 생성하고 변수에 할당합니다.

  • 필터링된 결과 리스트를 콘솔에 출력합니다.

참고: 더 간결하게 작성하기

여러 타입을 일일이 비교하는 대신, isinstance는 두 번째 인자로 튜플을 받을 수 있으므로 아래처럼 코드를 더 짧게 만들 수도 있습니다.

complex_types = (list, tuple, dict, set)

my_result = [row for row in my_list if any(isinstance(element, complex_types) for element in row)]

이 방식은 나중에 새로운 자료형을 추가할 때 튜플에 항목만 더하면 되므로 유지보수 측면에서도 유리합니다.