늒네 기록

[python] list comprehension - 2 본문

언어 공부 기록/python

[python] list comprehension - 2

jaeha lee 2020. 9. 12. 01:33

다음과 같은 리스트를 만들고 싶다면 어떻게 해야할까?

l = [
    [0],
    [0,1],
    [0,1,2],
    [0,1,2,3],
    [0,1,2,3,4]
]

이전에 쓴 list comprehension 글에서 사용한 방법을 각 아이템마다 적용해보면 다음과 같다.

l = [
    [i for i in range(1)],
    [i for i in range(2)],
    [i for i in range(3)],
    [i for i in range(4)],
    [i for i in range(5)]
]

그런데, 여기에도 규칙이 있지 않은가? range 안에 있는 숫자가 [1,2,3,4,5] 안에 있는 숫자로, 너무나도 range로 표현하면 좋겠다는 생각이 든다. 저걸 j for j in range(1,6)으로 표현한다고 하고, 저 리스트 자체도 list comprehension으로 표현한다면 이렇게 되겠다.

l = [[i for i in range(j)] for j in range(1,6)]

각 아이템이 [i for i in range(j)]꼴이고, j가 1, 2, ..., 5로 바뀌니, list comprehension을 두 번 먹여서 이렇게 짧게 표현이 가능해진다. 사실상 아래의 2중 for문을 줄여놓은 것이라고 볼 수 있다.

l = []
for j in range(1, 6):
    tmp = []
    for i in range(j):
        tmp.append(i)
    l.append(tmp)

list comprehension에 익숙하면 이렇게 for문을 써놓은 것보다 훨씬 직관적으로 l 안에 무엇이 들어있는지 이해할 수 있다.

반응형
Comments