2차원 리스트를 1차원 리스트로 만들기
문자열을 담은 이차원 리스트, mylist 가 solution 함수의 파라미터로 주어집니다. solution 함수가 mylist를 일차원 리스트로 만들어 리턴하도록 코드를 작성해주세요.
| INPUT | OUTPUT |
|---|---|
| [ [1], [2] ] | [1, 2] |
| [['A', 'B'], ['X', 'Y'], ['1']] | ['A', 'B', 'X' ,'Y', '1'] |
def solution(mylist):
result = []
for sub in mylist:
for i in sub:
result.append(i)
return result위 풀이는 가장 일반적인 풀이이지 않을까 생각한다. 여기서 약간 파이썬스러운(?) 코드를 넣으면 이중for문을 돌지 않아도 된다. 그 풀이는 아래와 같다.
def solution(mylist):
result = []
for sub in mylist:
result += i
return result위 풀이를 약간 업그레이드 시키면 아래와 같이 바꿀 수 있다.
def solution(mylist):
return sum(mylist, [])이 풀이를 이해하려면 sum()메소드에 대해 조금 더 자세히 알아야 한다. sum(a, b) 메소드는 두 개의 인자를 받을 수 있다. 첫번째 인자는 iterable 객체이고 두번째 인자는 시작값을 나타낸다.
solution1
import itertools
def solution(mylist):
return itertools.chain(*mylist)chain() 메소드는 인자로 받은 iterables가 모두 소진될 때까지 진행하는 iterator를 만든다. 즉 중첩 리스트(시퀀스)를 단일 리스트(시퀀스)로 만드는데 사용된다. 자바스크립트의 flat() 메소드와 유사하다.
solution2
import itertools
def solution(mylist):
return itertools.chain.from_iterable(mylist)chain() 과 chain.from_iterable()의 차이점은 인자로 들어갈 때, unpacking해주느냐 마냐의 차이가 있다.