파이썬은 다양한 데이터 조작 기능을 제공하는 강력한 언어입니다. 이 글에서는 숫자 쌍이 튜플(tuple) 형태로 담긴 리스트가 주어졌을 때, 전체 요소에서 고유한 숫자(자릿수)만 추출하는 방법을 알아보겠습니다.
re 모듈과 set 활용하기
정규표현식 모듈인 re에는 sub 함수가 있습니다. 이 함수는 정확한 일치 대신 정규표현식 패턴에 매칭되는 문자열을 치환하는 데 사용됩니다. 따라서 정규표현식을 설계해 튜플 리스트를 일반 문자열로 변환한 뒤, set 함수를 적용하면 중복 없이 고유한 숫자들만 손쉽게 얻을 수 있습니다.
예제 코드
import re
listA = [(21, 3), (13, 4), (15, 7), (8, 11)]
# 주어진 리스트
print("Given list : \n", listA)
temp = re.sub(r'[\[\]\(\)]', '', str(listA))
# set 사용
res = [int(i) for i in set(temp)]
# 결과 출력
print("List of digits: \n", res)
실행 결과
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Given list : [(21, 3), (13, 4), (15, 7), (8, 11)] List of digits: [1, 3, 2, 5, 4, 7, 8]
itertools.chain과 set 활용하기
itertools 모듈은 중첩된 자료구조의 요소들을 하나씩 펼쳐서 꺼낼 수 있게 해주는 chain 메서드를 제공합니다. 먼저 빈 집합(set)을 생성한 뒤, 각 문자열의 개별 문자를 하나씩 집합에 추가하면 됩니다.
예제 코드
from itertools import chain
listA = [(21, 3), (13, 4), (15, 7), (8, 11)]
# 주어진 리스트
print("Given list : \n", listA)
temp = map(lambda x: str(x), chain.from_iterable(listA))
# set과 add 사용
res = set()
for i in temp:
for elem in i:
res.add(elem)
# 결과 출력
print("Set of digits: \n", res)
실행 결과
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Given list :
[(21, 3), (13, 4), (15, 7), (8, 11)]
Set of digits:
{'1', '3', '2', '5', '4', '7', '8'}
마무리
두 가지 방법 모두 튜플 리스트에서 고유한 숫자를 추출하는 데 유용합니다. 첫 번째 방법은 re.sub로 불필요한 괄호와 쉼표를 제거한 후 정수형으로 변환하기 때문에 결과가 정수 리스트로 얻어지고, 두 번째 방법은 itertools.chain으로 요소를 펼쳐 집합에 추가하기 때문에 결과가 집합(set) 형태로 얻어집니다. 상황과 원하는 반환 타입에 따라 적절한 방법을 선택하면 됩니다.