[파이썬/Python] 두 개 이상의 리스트 병합하기
#리스트 각 요소별 병합
#merge list
#리스트 각 요소의 위치별로 병합하기
두 개 이상의 리스트를 병합하고 싶을 경우, 어떻게 해야할까?
단순 병합이 아닌, 리스트 내 각 요소의 위치별로 묶고 싶다면?
예를 들어
[1,2,3], [3,4,5]의 두 리스트가 있을 경우,
병합 결과 아래와 같이 나오게 하고 싶다.
[1,3], [2,4] ,[3,5]
그리고, 두 개 이상의 리스트가 요소의 길이가 다를 경우에도 병합하길 원한다면..
먼저 위 조건을 만족시키는 함수를 구현한다.
def merge_list(*args, fill_value = None):
max_length = max([len(lst) for lst in args])
merged = []
for i in range(max_length):
merged.append([
args[k][i] if i < len(args[k]) else fill_value for k in range(len(args))
])
return merged
fill_value는 만약 두 개 이상의 리스트가 길이가 다를 경우, 병합했을 때 짝이 안맞을 수 있는데
리스트의 길이가 짧은 쪽에는 file_value를 넣어줘서 채워주고 싶은 값을 설정할 수 있도록 했다.
테스트를 위해 아래와 같은 3가지 종류의 리스트가 있다고 가정한다.
A = ['a', 'b', 'c']
B = [3, 4, 5, 6]
C = [True, False]
위 3가지 리스트를 구현한 함수로 병합하면 어떤 결과가 나올까?
먼저 fill_value는 넣지 않고 단순 병합을 시도한다.
print(merge_list(A, B, C))
그 결과, 아래와 같이 각 요소의 위치별로 잘 병합이 되고, 길이가 짧은 쪽의 리스트 값들은 'None'이 들어가는 것을 볼 수 있다.
[['a', 3, True], ['b', 4, False], ['c', 5, None], [None, 6, None]]
그러면 None 말고 다른 값으로 채워넣고 싶다면, fill_value를 설정하면된다.
'_BLANK_'라는 문구를 넣어보았다.
print(merge_list(A, B, C, fill_value = '_BLANK_'))
그 결과, None 자리에 '_BLANK_' 문구가 나타나는 것을 볼 수 있다.
[['a', 3, True], ['b', 4, False], ['c', 5, '_BLANK_'], ['_BLANK_', 6, '_BLANK_']]
자주는 아니어도, 언젠간 쓸 날이 올 것이기에 기억해두면 좋을 것 같다.
아래에는 전체 코드를 공유한다.
def merge_list(*args, fill_value = None):
max_length = max([len(lst) for lst in args])
merged = []
for i in range(max_length):
merged.append([
args[k][i] if i < len(args[k]) else fill_value for k in range(len(args))
])
return merged
A = ['a', 'b', 'c']
B = [3, 4, 5, 6]
C = [True, False]
print(merge_list(A, B, C))
print(merge_list(A, B, C, fill_value = '_BLANK_'))