본문으로 건너뛰기

Python 두개의 리스트 하나로 병합

파이썬에서 두개의 리스트를 하나로 합칠 때 사용할 수 있는 방법들을 소개합니다.

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])]