문자열을 담은 이차원 리스트, mylist 가 solution 함수의 파라미터로 주어집니다. solution 함수가 mylist를 일차원 리스트로 만들어 리턴하도록 코드를 작성해주세요.제한 조건
- arr의 길이는 1 이상 100 이하인 자연수입니다.
- arr 원소의 길이는 5를 넘지 않습니다.
예시
inputoutput
[[1], [2]] | [1, 2] |
[['A', 'B'], ['X', 'Y'], ['1']] | ['A', 'B', 'X' ,'Y', '1'] |
제출한 정답
def solution(mylist):
answer = [y for x in mylist for y in x ]
return answer
예측 오답
def solution(mylist):
answer = []
for element in my_list:
answer += element
return answer
풀이 정답
def solution(mylist):
import itertools
answer = list(itertools.chain(*mylist))
return answer
# 방법 1 - sum 함수
answer = sum(mylist, [])
# 방법 2 - itertools.chain
import itertools
answer = list(itertools.chain.from_iterable(mylist))
# 방법 3 - itertools와 unpacking
import itertools
answer = list(itertools.chain(*mylist))
# 방법 4 - list comprehension 이용
answer = [element for array in mylist for element in array]
# 방법 5 - reduce 함수 이용 1
from functools import reduce
answer = list(reduce(lambda x, y: x+y, mylist))
# 방법 6 - reduce 함수 이용 2
from functools import reduce
import operator
answer = list(reduce(operator.add, mylist))
# 방법 7 - numpy 라이브러리의 flatten 이용
import numpy as np
answer = np.array(mylist).flatten().tolist()
방법 1.
기본적으로 sum 함수의 경우 아래의 방법이 적용된다.
sum(iterable, start=0)
sum 함수는 iterable 하고 숫자로만 이루어진 변수와 추가적으로 더해줄 숫자를 입력받는다.
반환 : iterable의 합 + start 값
python 에서 + 연산은 리스트의 연결로 이루어지기 때문에 sum(mylist, [])을 사용해도 list 가 이어진다.
주요한 것은 start 부분에 []를 입력해 주어야 [] + [1] + [2] 로 [1, 2]가 된다.
default 가 0으로 0 + [1] + [2] 의 경우 type error가 발생한다.
방법2, 방법 3
itertools의 chain을 사용하였다.
iterable 가능한 변수를 입력하면 하나의 리스트로 반환한다.
from_iterable의 경우 하나의 iterable 변수를 입력해야 한다.
list(itertools.chain('abcdef')) -> ['a', 'b', 'c', 'd', 'e', 'f']
list(itertools.chain(['a'], ['b', 'c', ,'d', 'e', 'f'])) -> ['a', 'b', 'c', 'd', 'e', 'f']
list(itertools.chain.from_iterable('abcdef')) -> ['a', 'b', 'c', 'd', 'e', 'f']
방법 4.
list comprehension을 사용하여 내부에서 2중 for문을 하나의 list로 반환한다.
헷갈릴 수 있는 점은 for문의 위치인데
[element for array in mylist for element in array]
for array in mylist:
for element in array:
element
순서대로 사용하면 된다.
방법 5, 방법 6
functools의 reduce를 사용하였다.
lambda와 operator.add를 사용한 점만이 방법 5, 6에서의 차이이다.
reduce 함수는 함수와 iterable 변수를 입력받는다.
map과 비슷하게 반복되며 function을 수행한다.
reduce의 function 에는 2개의 인자 데이터가 들어가게 되는데
[['A', 'B'], ['X', 'Y'], ['1']] 를 예로 들면
처음 반복될때 x = ['A', 'B'], y = ['X', 'Y']가 들어가고
반환값이 x에 저장되고 다음 반복 수행시 x에 들어가게 된다.
x = ['A', 'B', 'X', 'Y'], y = ['1']로 + 수행후 결과 x를 반환하게 된다.
방법 7
numpy 를 사용할 경우
numpy array로 변환한 후에 한 차원 낮은 리스트로 반환해주는 flatten을 사용, list로 변환할 수 있다.
해당 방법은 [[1], [2]] 에만 적용되고 [['A', 'B'], ['X', 'Y'], ['1']] 에는 적용되지 않는다.
column의 길이가 다르기 떄문에 flatten이 적용되지 않기 때문이다.
'Python' 카테고리의 다른 글
파트6. 가장 많이 등장하는 알파벳 찾기 (0) | 2022.07.22 |
---|---|
파트6. 순열과 조합 (0) | 2022.07.21 |
파트5. 삼각형 별찍기 (0) | 2022.07.13 |
파트5. sequence 멤버를 하나로 이어붙이기 (0) | 2022.07.13 |
파트4. map 함수 응용하기 (0) | 2022.07.13 |