Python

python 리스트 한 줄에 쓰기

mynamemj 2023. 7. 24. 09:20
반응형

한줄쓰기

파이썬에서 for 문을 사용해 어떤 리스트에 append하는 것을 한 줄 안에 사용하는걸 본적 있을 수 있다. 예를 들면

[ i for i in range(5) ]

와 같은 형식인데,
이를 리스트 컴프리헨션이라고 한다.
제목에 바로 python listcomplihension이라 적지 않고 한 줄 쓰기라고 이야기 한 이유는 이런걸 뭐라불러야 하는지 모르는 사람이 어쩌다 검색해서 들어오지않을까? 해서이다.

Python Listcomplihension

리스트 컴프리헨션은 for문을 이용한 리스트 제작을 한줄 안에 쓴다고 생각하면 쉽다. 이러한 방법은 리스트 뿐 아니라 딕셔너리나 집합등에서도 사용이 가능하지만 이해하기 쉽게 for문만 알아보자

my_list = []
for i in range(5):
    my_list.append(i)
print(my_list)
## 결과 => [0, 1, 2, 3, 4]

#################################

my_listC = [ i for i in range(5) ]
print(my_listC)
## 결과 => [0, 1, 2, 3, 4]

위 아래는 같은 결과값을 가지지만 문법의 차이만 있을 뿐이다. 위는 어떻게 코드가 흘러가는지 이해하기 쉽고, 아래는 한눈에 보기 간편하다. 때문에 가독성을 유지하는 선 아래에서 어떤것을 사용하든지 선택이다.

이해하기

예시처럼 쉬운것은 보고 적기만 해도 따라할 수 있다. 하지만 우리는 다른곳에서도 사용 해 봐야하지않을까? 사용방법에 대해 간단하게 이해해보자.
기본적으로 위에서 아래로 흘러가던 코드를 왼쪽에서 오른쪽으로 흘러간다 생각하자. 생각의 흐름은 아래와 같다.

  1. 우리는 리스트를 만들것이기 때문에 대괄호를 써준다.
    lst = []
    ########
    lst = []
  2. 이 리스트는 for문 0~4를 순회하여 만들것이다
    lst = []
    for i in range(5):
    #########
    lst = [ for i in range(5) ]
  3. for문에 의해 0~4는 각각 i이고, 이를 lst에 넣는다
    lst = []
    for i in range(5):
     lst.append(i)
    #########
    lst = [ i for i in range(5) ]

즉, [ 리스트에 들어 갈 결과 // 조건 및 순회 ] 이다.
이는 if문과 더 많은 for문에서도 사용할 수 있다. * 위에서 아래 => 왼쪽에서 오른쪽

lst = []
for i in range(5):
    for j in ["사과", "배"]:
        if i > 3:
            lst.append(j + i + "개")
#########
lst = [ j+str(i)+"개" for i in range(5) for j in ["사과", "배"] if i > 3 ]

## 두 lst는 모두 ['사과4개', '배4개']

처음에는 잘 안읽히고 사용하기도 불편하지만 사용하다보면 적응이 된다. 나는 오히려 사용하고싶어서 for문을 먼저 적고 이걸 다시 컴프리헨션으로 바꿔 적으며 억지로 써보기도 했다.

 

의견은 환영합니다🧐

반응형