파이썬 컴프리헨션 #12

반영환·2023년 4월 29일

파이썬

목록 보기
12/17
post-thumbnail

파이썬 컴프리헨션

리스트

numbers = []
for n in range(1, 10+1):
    numbers.append(n)
    
numbersComprehension = [x for x in range(10)]

출처 : wikidocs.net/22805

우리가 변수 x를 가지고 좀 더 다양한 값을 리스트에 넣어주고 싶다면

[ 2*x for x in range(1, 10+1) ]
# >>> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

리스트에 조건걸기

리스트 컴프리헨션을 이용해 리스트를 만들 때, 우리는 조건을 걸어줄 수도 있다.

짝수만 넣어주고 싶을 때

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 x in ['쌈밥', '치킨', '피자']:
    for y in ['사과', '아이스크림', '커피']:
        for z in ['배달 시키기', '가서 먹기']:
            print(x, z, y)# 이런 삼중첩 for문을

[ (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값을 추가한다.
profile
최고의 오늘을 꿈꾸는 개발자

0개의 댓글