2 분 소요

List Comprehension (리스트 내포)

  • comprehension은 파이썬의 유용한 도구이다.
    • [ i*i for i in range(1,11) ]: 계산식 for문
    • [ i*i for i in range(1,11) if i % 2 == 0 ]: 계산식 for문 조건문
    • [ ( x, y ) for x in range(15) for y in range(15) ]: 계산식 for문 for문

ex) 길이가 1~10 인 정사각형 중에 길이가 짝수인 정사각형의 넓이 구하기

# 기존 방법
areas1 = []
for i in range(1,11):
    if i % 2 == 0:
        areas1.extend([i * i])

print('areas1 :', areas1)  # [4, 16, 36, 64, 100]
# list comprehension 방법
areas2 = [i * i for i in range(1,11) if i % 2 == 0] # ✅ list comprehension
print('areas2 :', areas2)  # [4, 16, 36, 64, 100]
  • for 문을 돌면서 i를 하나씩 가져오고,
  • if 조건에 맞는 i만 보낸다.
  • 조건에 맞는 i 를 원하는대로 계산해서 리스트에 넣는다.

ex) 길이가 3*3 인 바둑판의 좌표 만들기

board = [(x, y) for x in range(3) for y in range(3)]
print(board)
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

ex) 2차원 리스트 입력받기

# R: 행의 수, C: 열의 수
R, C = map(int, input().split()) # 2 3 입력
board = [list(input().split()) for _ in range(R)] # ✅ list comprehension
# a b c
# d e f 입력
print(board) # [['a', 'b', 'c'], ['d', 'e', 'f']] 출력

Dictionary Comprehension (딕셔너리 내포)

  • 원하는 구성요소를 가지는 딕셔너리를 쉽게 만들 수 있는 기능

ex) 번호를 key로 갖고 이름을 value로 가지는 dictionary 만들기

students = ['민정', '수지', '지연', '민수']
for i, x in enumerate(students):
    print('{}번의 이름은 {}입니다'.format(i+1, x))

# 1번의 이름은 민정입니다
# 2번의 이름은 수지입니다
# 3번의 이름은 지연입니다
# 4번의 이름은 민수입니다
# Dictionary Comprehension
students = ['민정', '수지', '지연', '민수']
students_dic = {
    i+1 : x for i, x in enumerate(students)
    # '{}번'.format(i+1) : x for i, x in enumerate(students) # format 활용
}

print(students_dic)
# {1: '민정', 2: '수지', 3: '지연', 4: '민수'}
# {'1번': '민정', '2번': '수지', '3번': '지연', '4번': '민수'} # format 활용

zip

  • zip(iterable*)은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다.
  • 2개 이상의 리스트나 스트링을 받아서 인덱스에 맞게 for in문에서 하나씩 던져줄 수있게 만들어준다.
students = ['민정', '수지', '지연', '민수']
scores = [85, 92, 78, 100]

for x, y in zip(students, scores):
    print(x, y)

# 민정 85
# 수지 92
# 지연 78
# 민수 100  

zip을 활용한 dictionary comprehension 만들기

students = ['민정', '수지', '지연', '민수']
scores = [85, 92, 78, 100]

score_dic = {
    x : y for x, y in zip(students, scores)
    # x : '{}점'.format(y) for x, y in zip(students, scores) # format 활용
}

print(score_dic)
# {'민정': 85, '수지': 92, '지연': 78, '민수': 100}

ref.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: