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

Python – 혼합 리스트에서 문자열 요소만 추출하는 방법

숫자와 문자열이 섞여 있는 중첩 리스트(혼합 행렬)에서 문자열 요소만 골라내야 하는 경우, 리스트 컴프리헨션(list comprehension)isinstance() 메서드를 함께 사용하면 간단하게 해결할 수 있습니다.

예제 코드

아래는 혼합 리스트에서 문자열 요소를 추출하는 전체 예제입니다.

my_list = [[35, 66, 31], ["python", 13, "is"], [15, "fun", 14]]

print("원본 리스트 :")
print(my_list)

my_result = [element for index in my_list for element in index if isinstance(element, str)]

print("추출 결과 :")
print(my_result)

실행 결과

원본 리스트 :
[[35, 66, 31], ['python', 13, 'is'], [15, 'fun', 14]]
추출 결과 :
['python', 'is', 'fun']

코드 설명

  • 정수와 문자열이 섞인 리스트의 리스트(중첩 리스트)를 정의하고 콘솔에 출력합니다.

  • 리스트 컴프리헨션을 사용해 중첩 리스트의 모든 요소를 순회합니다. 바깥쪽 for 문이 각 하위 리스트를, 안쪽 for 문이 하위 리스트 내 개별 요소를 반복 처리합니다.

  • isinstance(element, str) 메서드로 각 요소가 문자열(str) 타입인지 검사합니다. 이 방식은 타입을 확인하는 가장 파이썬다운 방법으로 알려져 있습니다.

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

  • 최종 결과 리스트를 콘솔에 출력합니다.

참고: filter()를 활용한 대안

같은 작업은 filter() 함수와 itertools.chain을 조합해서도 구현할 수 있습니다.

from itertools import chain

my_list = [[35, 66, 31], ["python", 13, "is"], [15, "fun", 14]]

result = list(filter(lambda x: isinstance(x, str), chain.from_iterable(my_list)))
print(result)  # ['python', 'is', 'fun']

다만 리스트 컴프리헨션이 가독성과 성능 면에서 더 유리하기 때문에, 일반적으로는 첫 번째 방법이 권장됩니다.