리스트 컴프리헨션(List Comprehension) 개념
Java와 C와 같은 언어들을 사용하다가 파이썬의 소스를 보다보면 가장 처음 당황하는 방식이 아마 리스트 캄프리헨션(List Comprehension)이라 생각한다. 파이썬은 수학적인 언어이다보니 기능들도 매우 수학적인데 이 기능은 리스트를 이용하여 새로운 리스트를 만드는 것이다.
그래서 이 기능을 잘 활용하는 사람은 파이썬을 매우 잘 사용하는(파이썬스럽게...) 사람이라 말을 할 수도 있을 것이다.
List Comprehension example
짝수값 리스트
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers)
# [0, 2, 4, 6, 8]
range로 0 ~ 9까지의 값을 뽑고 그 중에 나누기 2를 하여 나머지가 0인 값(짝수)을 리스트 형태로 저장한다.
홀수값 리스트
odd_numbers = [x for x in range(10) if x % 2 == 1]
print(odd_numbers)
# [1, 3, 5, 7, 9]
이번에는 반대로 나누기 2를 하여 나머지가 1인 값(홀수)을 리스트 형태로 저장한다.
홀수값 제곱 리스트
odd_squares = [x * x for x in odd_numbers]
print(odd_squares)
# [1, 9, 25, 49, 81]
이전 계산으로 만들어진 홀수값(1,3,5,7,9)들을 다시 제곱하여 홀수제곱 변수에 담는다.
구구단 리스트
gugudan = [(x+2,y+1,(x+2)*(y+1))
for x in range(8)
for y in range(9)]
print(gugudan)
# [(2, 1, 2), (2, 2, 4), ... (9, 9, 81)]
list comprehension을 사용하면 쉽게 구구단 리스트를 저장할 수 있다. 내부적으로 이중 for문도 사용이 가능하기에 이중 for문을 돌려서 x와 y값을 생성하고 이를 곱해서 구구단 형태로 값을 저장한다.
로또번호 쉽게 만들기
import random
candi_number = [x+1 for x in range(45)]
random.shuffle(candi_number)
print(candi_number)
# [44, 3, 24, 17, 36, 35, ... 20]
lotto_number = candi_number[:6]
print(lotto_number)
# [44, 3, 24, 17, 36, 35]
로또 역시 매우 쉽게 만들 수 있다. 1~45의 값을 candi_number 리스트 변수에 담고, 이를 random.shuffle 메소드로 섞는다. 그리고 0~5번째 배열의 값을 가져오면 중복되지 않고 쉽게 로또 번호를 가져올 수 있다.
반응형
'Language > Python' 카테고리의 다른 글
[Anaconda] 아나콘다 가상환경 삭제 (0) | 2022.01.23 |
---|---|
[Python] 리스트 섞기, random.shuffle (0) | 2021.06.13 |
[Python] 메타문자와 findall() #1 - 파이썬 정규표현식 (0) | 2021.06.13 |
[Python] 리스트(List) 정렬, 역정렬 (0) | 2021.05.31 |
[Python] 파이썬, 평균, 분산, 표준편차 구하기 (0) | 2021.05.22 |