https://stackoverflow.com/questions/11264684/flatten-list-of-lists/11264799
참고.
리스트안에 리스트가 있을 경우 flatten시키고 싶은 경우가 있다.
[[1], [2,3], [4,5,6], [7,8,9,10]] -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
예전에 numpy를 한번 봤었을때 https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.ndarray.flatten.html 같이 특정 함수가 있을줄 알았는데,
list comprehension을 사용해서 flatten이 가능하다. 파이썬에는 flatten에 관련된 표준 함수가 없다고 하는
그 이유는 여기에 나와있다.
list comprehension을 이용하는 방법은 아래와 같다.
list_of_lists = [[1], [2,3], [4,5,6], [7,8,9,10]]
flattened = [val for sublist in list_of_lists for val in sublist]
print flattened
여기서 list comprehension을 좀 신기하게 한다.(나만 신기한가) 일반적으로 list comprehension을 만들때
오른쪽에서 왼쪽으로 만들었는데, 여긴 일단 list_of_lists를 반복하게 한 후 그 각각의 인자를 다시 이
list_of_list의 바깥에 씌운다(?) 그러니까 펼쳐서 짜보자면
def flatten_list(list_of_lists, depth): if depth > 0: return list_of_lists ret_list = [] for sublist in list_of_lists: if type(sublist) is list: ret_list.extend(flatten_list(sublist, depth + 1)) else: ret_list.append(sublist) return ret_list list_of_lists = [[1], [2,3], [4,5,6], [7,8,9,10]] print flatten_list(list_of_lists, 0) flattened = [val for sublist in list_of_lists for val in sublist] print flattened
이런식으로 될것같다. 리스트안에 리스트 하나일경우에는 되지만 2개이상일 경우.
[[1], [2,3], [4,[5],6], [7,8,9,10]] 요런 경우는 되지 않는다.
결론은 이런 종류의 희안한 comprehension도 되는구나...
'Python > 2.7 information' 카테고리의 다른 글
파일 옮기는 꿀팁. (SimpleHTTPServer) (0) | 2019.08.01 |
---|---|
general function for multiprocessing (0) | 2018.10.17 |
파이썬 읽어볼거리. (듀랑고 개발자분들의 글) (0) | 2018.04.30 |
crontab으로 프로그램 돌릴시 주의할점, 자세한 에러 출력법 (1) | 2018.02.13 |
파이썬으로 구글 시트 조작. (2) | 2018.02.07 |