파이썬에서는 for문을 좀 더 간결하게 사용하는 문법을 지원한다.
기존에 반복적으로 리스트와 딕셔너리에 값을 넣을 때 코드가 길어지는 경우가 있었는데
이 길이를 줄일 수 있다는 것!
리스트
먼저, 일반적으로 우리가 리스트를 만들어보자.
numbers = []
for n in range(1, 10+1):
numbers.append(n)
이를 한 줄로 표현하려면!!
[x for x in range(10)]
리스트를 생성하는 방식은 []를 이용한다는 것으로 동일하나, 리스트 내부에 코드를 작성한다는 점이 차이가 난다.
리스트 컴프리헨션을 이용해 for문을 돌릴 때, 반복되는 변수는 for 문 앞에 작성해준다.
우리가 변수 x를 가지고 좀 더 다양한 값을 리스트에 넣어주고 싶다면
[ 2*x for x in range(1, 10+1) ]
# >>> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
for 키워드 앞의 x에 뭔짓거리를 해주면 된다.
리스트에 조건걸기
리스트 컴프리헨션을 이용해 리스트를 만들 때, 우리는 조건을 걸어줄 수도 있다.
만약 우리가 짝수만 넣어주고 싶을 때
even_numbers = []
for n in range(1, 10+1):
if n % 2 == 0:
even_numbers.append(n)
이런식으로 넣을 수도 있지만, for문 뒤에 if문을 붙여주면 더 짧게 줄일 수 있다.
if문을 여러개 쓰고 싶다면 뒤에 그냥 이어서 써주면 된다.
[x for x in range(10) if x % 2 ==0]
# >>> [2, 4, 6, 8]
중첩 for문
리스트 컴프리헨션은 중첩된 for문도 지원한다.
이런 삼중첩 for문을for x in ['쌈밥', '치킨', '피자']: for y in ['사과', '아이스크림', '커피']: for z in ['배달 시키기', '가서 먹기']: print(x, z, y)
이런식으로 짧게 나타낼 수 있다.[ (x, z, y) for x in ['쌈밥', '치킨', '피자'] for y in ['사과', '아이스크림', '커피'] for z in ['배달 시키기', '가서 먹기']]
for문의 범위는 왼쪽부터 가장 위이고 오른쪽으로 갈 수록 아래이다.
딕셔너리
리스트 컴프리헨션을 사용했던 것과 같이 딕셔너리도 컴프리헨션을 지원한다.
students = ['철수', '영희', '길동', '순희']
dicts_ = { student: 0 for student in students }
# {'철수': 0, '영희': 0, '길동': 0, '순희': 0}
리스트와 같이 for문 앞에 변수를 둠으로 딕셔너리를 초기화 할 수 있다.
딕셔너리에서 값을 변경하고 싶다면
scores = {'철수': 50, '영희': 80, '길동': 90, '순희': 60, '전학생': 100}
scores = { name: score for name, score in scores.items() if name != '전학생'}
print(scores)
딕셔너리 함수가 튜플형태로 키, 값 쌍을 리턴해준다는 사실을 기억하면서 초기화를 해주면 된다.
알고리즘에서 사용한 것
- 딕셔너리에서 최대값을 가지는 key 값 찾아내기
answer = [k for k, v in alpha.items() if v == max(alpha.values())]
- for 문 앞 변수 k를 리스트 내에 넣을 거다.
- alpha란 딕셔너리의 아이템들을 튜플형태로 가져와서 k, v 쌍으로 받아온다
- 만일 alpha 딕셔너리의 값들의 최대값과 v 가 같다면, 리스트에 그에 해당하는 key값을 추가한다.
'Language > Python' 카테고리의 다른 글
13. 파이썬 input().split()과 map() (0) | 2021.09.18 |
---|---|
12. 파이썬 max 함수 (0) | 2021.09.18 |
10. 파이썬 빠른 입출력 (0) | 2021.09.15 |
9. 파이썬 상호작용 (0) | 2021.09.13 |
8. 파이썬 모듈 (0) | 2021.09.13 |