HOWTO · Python
Python에서 튜플을 목록으로 변환
이 튜토리얼은 튜플을 리스트로 변환하는 방법을 보여줍니다
이 페이지의 내용
Python에서 튜플을 리스트로 변환하려면 튜플을 list() 생성자에 전달합니다: list(my_tuple). 튜플은 불변이고 리스트는 가변이므로, 요소를 추가, 제거 또는 재정렬해야 할 때 튜플 변환은 그 데이터의 변경 가능한 버전을 얻는 방법입니다. 변환은 새로운 바깥쪽 리스트를 만듭니다. 요소 자체는 변환되지 않으며, 그 순서와 값은 정확히 보존됩니다. 이 글에서는 직접 변환, 압축 풀기 형태, 그리고 안쪽 튜플에 한 단계가 더 필요한 중첩 튜플을 변환하는 두 가지 표준 방법을 보여줍니다.
list()로 튜플을 리스트로 변환하기
list() 생성자는 모든 이터러블을 받아 그 요소들로 새 리스트를 만듭니다. 서로 다른 타입이 섞인 튜플을 포함해 어떤 내용의 튜플에서도 동작합니다:
mixed_tuple = ('apple', 42, 3.14, True)
my_list = list(mixed_tuple)
print(my_list)
출력:
['apple', 42, 3.14, True]
바뀌는 것은 컨테이너뿐입니다. 새 리스트 안의 문자열, 정수, 부동소수점수, 불리언은 이전과 같은 객체이며 같은 순서입니다. 그 자체가 변환되는 것은 없습니다. 나중에 my_list를 수정해도 리스트는 별개의 객체이므로 원래 튜플은 영향을 받지 않습니다. 평평한 튜플에 대해서는 이 한 번의 호출이 완전한 답이며 가장 먼저 손이 가야 할 방법입니다.
압축 풀기로 튜플을 리스트로 변환하기
리스트 디스플레이 안에서 * 연산자로 튜플의 압축을 풀어 리스트를 만들 수도 있습니다:
my_tuple = (1, 2, 3, 4, 5)
my_list = [*my_tuple]
print(my_list)
출력:
[1, 2, 3, 4, 5]
식 [*my_tuple]은 튜플의 요소들을 새 리스트로 풀어 넣습니다. 이 형태는 일반화된 압축 풀기(PEP 448)에 의존하므로 Python 3.5 이상에서 사용할 수 있습니다. Python 2나 Python 3.4 이하에서는 동작하지 않습니다. 압축 풀기는 새 리스트가 여러 시퀀스를 한 번에 결합할 때, 예를 들어 [*first, *second]와 같은 경우에 가장 유용합니다. 이런 경우 list()만으로는 추가 연결 단계가 필요합니다. 단일 튜플의 단순 변환에서는 list()와 정확히 같은 리스트를 만듭니다.
리스트 컴프리헨션으로 중첩 튜플 변환하기
단순한 list() 호출은 바깥쪽 컨테이너만 변환합니다. 튜플이 다른 튜플을 포함하고 있으면 안쪽의 것들은 튜플로 남습니다:
nested = ((1, 2), (3, 4), (5, 6))
print(list(nested))
출력:
[(1, 2), (3, 4), (5, 6)]
안쪽 튜플까지 모두 변환하려면 리스트 컴프리헨션으로 각 행에 list()를 적용합니다:
nested = ((1, 2), (3, 4), (5, 6))
converted = [list(row) for row in nested]
print(converted)
출력:
[[1, 2], [3, 4], [5, 6]]
각 row는 하나의 안쪽 튜플이고, list(row)가 그것을 리스트로 바꾸므로 결과는 리스트의 리스트가 됩니다. 같은 패턴은 변경이 필요한 각 수준에 적용함으로써 더 깊은 중첩으로도 확장됩니다.
map()으로 중첩 튜플 변환하기
map() 함수는 바깥쪽 튜플의 각 요소에 list를 적용해 같은 결과를 얻습니다. map()은 이터레이터를 반환하므로 최종 리스트를 만들려면 list()로 감쌉니다:
nested = ((1, 2), (3, 4), (5, 6))
converted = list(map(list, nested))
print(converted)
출력:
[[1, 2], [3, 4], [5, 6]]
map(list, nested)는 안쪽 튜플마다 list를 한 번씩 호출하는데, 이는 앞 섹션의 컴프리헨션이 명시적으로 쓴 것과 정확히 같습니다. 코드에서 더 읽기 좋은 형태를 선택하십시오. 컴프리헨션은 요소별 연산을 명시적으로 보여주고, map()은 변환이 단일 기존 함수일 때 간결합니다. 둘 다 원래의 중첩 튜플을 변경하지 않고 새로운 리스트의 리스트를 반환합니다.