코딩을 할 때,
중요한 것이 무엇이라고 생각하는가?
똑같은 결과를 출력한다고 하면,
읽는 사람이 코드를 읽고
무슨 의미인지 한눈에 파악할 수 있도록 하는 것이
중요하다고 생각한다.
그렇게 되려면,
코드가 간결해야 한다.
리스트 컴프리핸션 list comprehension은
파이썬의 독특한 특징 중의 하나인데
긴 코드를 간결하게 한 줄로 줄여 쓸 수 있도록 해준다.
리스트 컴프리핸션(=리스트 내포)은
iterable(반복가능)한 sequence(순서)가 있는 데이터로부터 새롭게 리스트를 만드는 것이다.
리스트 컴프리핸션이 없었다면
for loop를 사용해서 아래와 같이 코딩해야 한다.
numbers = [1,2,3]
new_list = []
for n in numbers:
new_n = n+1
new_list.append(new_n)
print(new_list)
[2, 3, 4]
리스트 컴프리핸션을 사용하면
아래와 같이 간결하게 줄일 수 있다.
numbers= [1,2,3]
new_list = [n+1 for n in numbers]
코드가 매우 간결하고, 읽기에도 쉽다!
리스트 컴프리핸션의 기본 공식은 아래와 같다.
new_list = [new_item for item in list]
[ ] : 대괄호를 친다.
new_list : 새로운 리스트의 이름
list : 반복할 목록(이터러블한 시퀀스가 있는 데이터- string 문자열, list 리스트, range 레인지, tuple 튜플)
item : 목록에 있는 요소로, 내가 원하는대로 부를 수 있다.
new_item : new item을 얻기 위해 실행해야 하는 표현식 또는 코드
list 안의 요소들을 하나씩 꺼내어 어떤 표현식을 거쳐 new_item으로 만든다음,
new_list라는 새로운 리스트에 new item을 저장한다.
result = [n*2 for n in range(1,5)]
print(result)
[2, 4, 6, 8]
이번에는 조건식을 포함한 리스트컴프리핸션의 기본 공식을 설명한다.
new_list = [new_item for item in list if test]
[ ] : 대괄호를 친다.
new_list : 새로운 리스트의 이름
if test : test는 조건이다. 해당 조건을 만족하는 item만 new item이 되기 위한 표현식을 수행한 후, new_list에 저장된다.
list : 반복할 목록(이터러블한 시퀀스가 있는 데이터- string 문자열, list 리스트, range 레인지, tuple 튜플)
item : 목록에 있는 요소로, 내가 원하는대로 부를 수 있다.
new_item : new item을 얻기 위해 실행해야 하는 표현식 또는 코드
list 안의 요소들을 하나씩 꺼내어 어떤 표현식을 거쳐 new_item으로 만든다음,
new_list라는 새로운 리스트에 new item을 저장한다.
<예제>
numbers = [1, 2, 3, 4, 5, 6]
result = [n/2 for n in numbers if n%2 == 0]
print(result)
[1.0, 2.0, 3.0]
numbers = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
result = [number **2 for number in numbers if number < 5]
print(result)
[1, 1, 4, 9]
a_numbers = [1,4,6,2,5,3,8]
b_numbers = [1,3,9,11,19,29]
result = [n for n in b_numbers if n in a_numbers]
print(result)
[1, 3]
이전 문제에서 리스트컴프리핸션 적용하여 코드 바꿔보기
missing_states = []
for state in all_states:
if state not in guessed_states:
missing_states.append(state)
missing_states= [state for state in all_states if state not in guessed_states]
'파이썬 > 파이썬(python) 중급' 카테고리의 다른 글
[26-3 파이썬] 판다스 데이터 프레임 iterrows() (0) | 2022.09.12 |
---|---|
[26-2 파이썬] 딕셔너리 컴프리핸션 dictionary comprehension (0) | 2022.09.12 |
[25-5 파이썬] read_csv(), to_list(), textinput(title, prompt), while, with as, if break (0) | 2022.09.11 |
[25-4 파이썬] addshape(), onscreenclick(), mainloop() (0) | 2022.09.07 |
[25-3 파이썬] 판다스로 데이터 처리하기(실습: 센트럴파크 다람쥐) (0) | 2022.09.06 |