728x90
1. list comprehension이란?
기존의 리스트 생성하는 방법을 편리하게 쓰는 문법
기존의 리스트를 생성하여 값을 입력하는 방법은 다음과 같습니다.
numbers = []
for n in range(0, 10):
numbers.append(n)
이러한 코드를 list comprehension이라는 문법으로 바꾸어보면
numbers_2 = [x for x in range(10)]
2. 다양한 list comprehension 예제
list comprehension은 for문에서 반복되는 변수를 콜론(:)다음에 줄을 바꿔 들여쓰기하는것이 아니라, for문앞에 작성
또한 list comprehension은 반복되는 변수에 여러가지 조건을 걸어줄 수 있습니다.
# list comprehension 문법 예제 2 입력될 값에 곱하기
"""
#이 코드는 아래와 같이 바꾸어 사용할 수 있다.
numbers_3 = []
for x in range(0, 10):
numbers_3.append(x*2)
print(numbers_3)
"""
numbers_3 = [x*2 for x in range(10)]
print(numbers_3)
#[0,2,4,6,8,10,12,14,16,18] 출력
list comprehension 문법에 자체적으로 조건을 걸 수도 있습니다.
even_numbers = []
for n in range(1, 10+1):
if n % 2 == 0:
even_numbers.append(n)
#다음과 같다
[x for x in range(1, 10+1) if x % 2 == 0]
for문을 중첩해서 작성 할 수도있고, 중복된 if문을 사용할 수도 있습니다.
#다중 if문
[ x for x in range(10) if x < 5 if x % 2 == 0 ]
#다중 for문
[ (x, z, y) for x in ['쌈밥', '치킨', '피자'] for y in ['사과', '아이스크림', '커피'] for z in ['배달 시키기', '가서 먹기']]
- for문이 작동하는 순서는 왼쪽에 있는 for문이 먼저 작동
다음과 같이 새로운 list를 작성할 수도 있습니다.
# list comprehension 문법 예제 3 리스트에 함수를 적용하여 새로운 list 생성
"""
#이 코드는 아래와 같이 바꾸어 사용할 수 있다.
names = ["SPIDY","WEB"]
lower_names = []
for i in names:
lower_names.append(i.lower())
print(lower_names)
"""
names = ["SPIDY","WEB"]
lower_names = [name.lower() for name in names]
print(lower_names)
#['spidy', 'web']출력
3. set comprehension, dictionary comprehension이란?
set comprehension은 기존의 list comprehension을 {}로 바꾸게되면 set comprehension으로 바뀌게 되는데, 그게 set comprehension입니다.
#list comprehension 그리고 set comprehension 결과값 비교
#set는 중복된 값을 표현하지 않는다.
print([x+y for x in range(10) for y in range(10)])
print({x+y for x in range(10) for y in range(10)})
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
#{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18} 출력
마찬가지로 dictionary comprehension도 list comprehension과 같이 dictionary를 만드는 문법입니다.
students = ['철수', '영희', '길동', '순희']
print({student: 0 for student in students})
#{'철수': 0, '영희': 0, '길동': 0, '순희': 0}출력
scores = {'철수': 50, '영희': 80, '길동': 90, '순희': 60, '전학생': 100}
scores = { name: score for name, score in scores.items() if name != '전학생'}
print(scores)
#{'철수': 50, '영희': 80, '길동': 90, '순희': 60}출력
zip 함수를 활용한 dictionary comprehension도 가능합니다.
https://spidyweb.tistory.com/342
# dictionary comprehension 예제 2, 리스트 2개를 zip으로 묶어 x를 key로 y를 value로 입력
students = ['철수', '영희', '길동', '순희']
scores = [50,60,80,90]
dict_compre = {x:y for x, y in zip(students,scores)}
print(dict_compre)
#{'철수': 50, '영희': 60, '길동': 80, '순희': 90} 출력
values에 들어갈 값을 점수-평균과 같이 설정할 수도 있습니다.
# dictionary comprehension 예제 3, 기존의 dictionary로 부터 새로운 dictionary 생성(자신의 점수 - 평균점수)
scores_1 = {'철수': 50, '영희': 80, '길동': 90, '순희': 60, '전학생': 100}
print({name: score-sum(scores_1.values())/len(scores_1) for name, score in scores_1.items()})
출처:
728x90
'language > Python' 카테고리의 다른 글
[Python] Argparse란? Argparse 모듈 개념과 실습 예제 (0) | 2022.03.03 |
---|---|
[Python] 파이썬의 여러가지 formatting 방법 다루기 (0) | 2022.03.02 |
[Python] Iterable, Iterator 개념과 예제 및 iterator 직접 만들기 (0) | 2022.03.02 |
[Python] closure(클로저)와 Decorator(데코레이터), 로깅(logging) 개념과 예제 (0) | 2022.02.28 |
[Python] lambda 함수(익명 함수) (0) | 2022.02.28 |
댓글