[TIL]List comprehension 중첩

김예진·2020년 11월 29일
0

TIL

목록 보기
29/40
post-thumbnail

리스트 컴플리헨션 중첩!!!
저번에 List comprehension에 대해 배웠는데 ... view를 짜다가 List comprehension 을 중첩으로 사용해야할 것 같은 느낌이 들었다. List comprehension을 중첩으로 사용할 수 있는지 검색한 결과 중첩으로 사용이 가능했다.

new_list = []
for i in range(1,4):
    for n in range(1,11):
        new_list.append(i*n)

중첩된 for문을 List comprehension으로 만들면,

new_list = [i*n for i in range(1,4) for n in range(1,10)]
>>> print(new_list)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]


처음 List comprehension을 접했을 때와 같이 혼...란... 했다. 그래서 조금 더 많은 예시를 찾아봤다.

- example 1

>>> list = [[1,2,3],[4,5,6],[7,8,9]]
>>> flat = [x for row in list for x in row]
>>> print(flat)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

example1에서 각각 리스트에 제곱을 하는 리스트 컴플리헨션을 만들면,

- example2

>>> list = [[1,2,3],[4,5,6],[7,8,9]]
>>> result = [[x**2 for x in row] for row in list]
>>> print(result)
[[1, 4, 9], [16, 25, 36], [49, 64, 81]]

- List comprehension 중첩 표현식

[ <<expression>> for <<element_a>> in <<iterable_a>> (optional if <<condition>>_a)
                 for <<element_b>> in <<iterable_b>> (optional if <<condition>>_b)
                 for <<element_c>> in <<iterable_c>> (optional if <<condition>>_c)
                 ........]

List comprehension 중첩 제한은 없지만 표현식이 2개가 넘어가면 이해하기 어려워지므로 복잡해질 것 같으면 헬퍼 함수를 작성해주어야 한다고 한다. 몇 줄을 절약하는 것도 좋지만 다른 사람들이 이해하기 어려워지니까 적절하게 사용하는 것이 좋을 것 같다.


- List comprehension 중첩해서 사용

profile
Backend Developer 🌱 벨로그 내용을 티스토리로 이사중~!

0개의 댓글