파이썬에서 두개의 리스트를 하나로 합칠 때 사용할 수 있는 방법들을 소개합니다.
list1 = [11, 23, 20]
list2 = [2, 9, 3]
merged = [11, 23, 20, 2, 9, 3]
1. + 연산자로 리스트 병합
아래와 같이 +
연산자를 이용하여 두개의 리스트의 모든 요소들을 새로운 리스트에 병합할 수 있습니다. list3는 list1과 list2의 모든 요소들을 갖고 있게 됩니다.
하나로 합쳐진 리스트를 다시 정렬하고 싶을 때는 list.sort()
를 호출하면 요소들이 정렬됩니다.
list1 = [11, 23, 20]
list2 = [2, 9, 3]
list3 = list1 + list2
print(list3)
list3.sort()
print(list3)
Output:
[11, 23, 20, 2, 9, 3]
[2, 3, 9, 11, 20, 23]
2. extend()로 리스트 병합
list1.extend(list2)
는 list2의 모든 요소들을 list1에 추가합니다. 위의 + 연산자를 이용한 방법은 기존 객체의 데이터가 변경되지 않지만, extend()
는 list1이 변경됩니다.
즉, 합치기 전의 list1 객체가 필요하다면 따로 복사해두어야 합니다. 또는 + 연산자를 이용한 방법을 사용하는 것이 좋습니다.
list1 = [11, 23, 20]
list2 = [2, 9, 3]
list1.extend(list2)
print(list1)
print(list2)
Output:
[11, 23, 20, 2, 9, 3]
[2, 9, 3]
3. map()을 이용하여 2차 리스트 병합
아래와 같이 list1과 list2는 2중 배열(리스트)입니다. map을 이용하여 n번째 요소 리스트끼리 병합할 수 있습니다.
list1 = [[1, 11], [2, 22], [3, 19]]
list2 = [[4, 2], [5, 9], [6, 3]]
list3 = list(map(list.__add__, list1, list2))
print(list3)
Output:
[[1, 11, 4, 2], [2, 22, 5, 9], [3, 19, 6, 3]]
4. map()을 이용하여 2차 리스트 병합 (+ 평탄화)
map()으로 2차 리스트를 병합하고, itertools.chain()
으로 평탄화를 하여 1차 배열로 만들 수 있습니다.
import itertools
list1 = [[1, 10], [2, 22], [3, 19]]
list2 = [[4, 2], [5, 9], [6, 3]]
list3 = list(map(list.__add__, list1, list2))
list4 = list(itertools.chain(*list3))
print(list4)
Output:
[1, 10, 4, 2, 2, 22, 5, 9, 3, 19, 6, 3]
5. zip()으로 리스트 병합
zip()
을 이용하면 2개의 리스트의 n번째 요소들을 Tuple로 묶고, 그것을 리스트에 추가할 수 있습니다.
list1 = [[1, 11], [2, 22], [3, 19]]
list2 = [[4, 2], [5, 9], [6, 3]]
list3 = list(zip(list1, list2))
print(list3)
Output:
[([1, 11], [4, 2]), ([2, 22], [5, 9]), ([3, 19], [6, 3])]