Python에서 튜플(tuple) 내부의 문자열을 제거해야 하는 경우, 리스트 컴프리헨션(list comprehension)과 type() 메서드를 함께 사용하면 간단하게 해결할 수 있습니다.
기본 개념
리스트는 서로 다른 자료형의 값을 하나로 저장할 수 있는 자료구조입니다. 즉, 정수, 실수, 문자열 등 어떤 타입의 데이터든 함께 담을 수 있습니다.
튜플의 리스트(list of tuple)란 말 그대로 리스트 안에 여러 개의 튜플이 포함된 구조를 의미합니다. 예를 들어 [('Hi', 45, 67), ('There', 45, 32)]와 같은 형태입니다.
- 리스트 컴프리헨션: 반복문을 한 줄로 축약하여 리스트를 순회하면서 원하는 연산을 수행할 수 있는 간결한 문법입니다.
- type() 메서드: 인자로 전달된 객체의 클래스(자료형)를 반환합니다. 이를 활용하면 특정 자료형만 필터링할 수 있습니다.
예제 코드
my_list = [('Hi', 45, 67), ('There', 45, 32), ('Jane', 59, 13)]
print("원본 리스트 : ")
print(my_list)
my_result = [tuple([j for j in i if type(j) != str])
for i in my_list]
print("문자열 제거 후 튜플 리스트 : ")
print(my_result)실행 결과
원본 리스트 :
[('Hi', 45, 67), ('There', 45, 32), ('Jane', 59, 13)]
문자열 제거 후 튜플 리스트 :
[(45, 67), (45, 32), (59, 13)]코드 설명
- 문자열과 정수가 섞여 있는 튜플들의 리스트를 정의하고 콘솔에 출력합니다.
- 리스트 컴프리헨션을 사용해 각 튜플을 순회하며 내부 요소를 검사합니다.
type(j) != str조건으로 해당 요소가 문자열이 아닌 경우만 남깁니다.- 필터링된 값들을 다시
tuple()로 변환하여 원래의 튜플 구조를 유지합니다. - 최종 결과는 변수
my_result에 저장되며, 이를 콘솔에 출력합니다.
추가 팁: isinstance() 활용하기
type() 대신 isinstance() 함수를 사용하는 것도 좋은 방법입니다. isinstance()는 상속 관계까지 고려하기 때문에 더 유연한 타입 검사가 가능합니다.
my_result = [tuple([j for j in i if not isinstance(j, str)])
for i in my_list]두 방법 모두 동일한 결과를 출력하지만, 일반적으로 Python 커뮤니티에서는 isinstance() 사용을 권장합니다. 상황에 맞게 선택하여 사용하시면 됩니다.