Web Development/Python

(Python) Comprehension

seongduck 2022. 10. 13. 22:45
  • List
  • List - Comprehension
  • if문 Comprehension
  • for문, for문 중첩문 Comprehension
  • Dictionary Comprehension

1. Comprehension

  • 적용 전
areas = []
for i in range(1,11):
    areas = areas + [i*i]
print("areas : ",areas)

 

  • 적용 후
areas2 = [i*i for i in range(1,11)]
print("areas2 : ",areas2)
  • ([1 * 1], [2 * 2] ... , [10 * 10]) 
  • 이러한 방식을 List Comprehension이라고 한다.

 

#출력 결과
areas :  [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
areas2 :  [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

2. If문 List Comprehension

  • 적용 전
#일반적인 문장
areas = []
for i in range(1,11):
    if i%2 == 0:
        areas = areas + [i * i]
print("areas : ",areas)

 

  • 적용 후
areas2 = [i*i for i in range(1,11) if i % 2 == 0]
print("areas2 : ",areas2)
  • if 조건문을 만족하는 것만 for문 앞으로 넘겨준다.

 

  • 출력 결과
areas :  [4, 16, 36, 64, 100]
areas2 :  [4, 16, 36, 64, 100]

3. for문 중첩 형태 List Comprehension

areas = [(x,y) for x in range(4) for y in range(3)]
print("areas : ", areas)

 

#출력 결과
areas :  [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 1), (3, 2)]
  • y를 먼저 돌고나서 앞의 x 반복문을 돌게 된다.

4. 실습

  • 1부터 100사이의 8의 배수를 가지도록 한다.
list1 = [i for i in range(1,101) if i% 8 == 0]

print("list1 : ", list1)
#출력 결과
list1 :  [8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96]

5. Dictionary Comprehension

  • 적용 전
students = ["태연","진우","정현","하늘","성진"]
for number, name in enumerate(students):
    print("{}번의 이름은 {}입니다.".format(number,name))

 

  • 적용 후
students_dict = {"{}번".format(number + 1): name for number, name in enumerate(students)}
print(students_dict)
  • enumerate를 통해 숫자와 students의 name을 가져와 각각 number, name에 넣는다.
  • for문을 도는데 그 앞의 number와 name에 들어가게 된다.
  • 이후 쭉 반복하여 선언해준다.
  • dictionary를 만든는 Compregension의 경우 ' [ ] ' 대신 ' { } '를 사용한다.

 

#출력 결과
0번의 이름은 태연입니다.
1번의 이름은 진우입니다.
2번의 이름은 정현입니다.
3번의 이름은 하늘입니다.
4번의 이름은 성진입니다.
{'1번': '태연', '2번': '진우', '3번': '정현', '4번': '하늘', '5번': '성진'}

6. Zip을 이용한 List, Dictionary Comprehension

  • 두 개의 리스트를 Dictionary Comprehension으로 만들기
students = ["태연","진우","정현","하늘","성진"]
scores = [85,92,78,90,100]

score_dic = {student : score for student, score in zip(students,scores)}
print(score_dic)
  • zip을 이용하여 students, scores 리스트를 하나로 묶는다.
  • student(key), score(value)를 뽑아내고 반복문을 진행한다. 
  • 딕셔너리 이므로  { } 형태로 선언하고 student : score 형식으로 key와 value를 입력하여 변수에 저장한다.
#출력 도구
{'태연': 85, '진우': 92, '정현': 78, '하늘': 90, '성진': 100}

7. 실습

  • 각각 두 개의 리스트를 하나의 딕셔너리 형태로 묶기
product_list = ["풀", "가위", "크래파스"]
price_list = [800, 2500, 5000]

product_dict = { product : price for product, price in zip(product_list,price_list)}

print(product_dict)
#출력 결과
{'풀': 800, '가위': 2500, '크래파스': 5000}

'Web Development > Python' 카테고리의 다른 글

(Python) Datetime 날짜 타입  (0) 2022.10.13
(Python) 오버라이드  (0) 2022.10.13
(Python) 상속  (0) 2022.10.13
(Python)Class 만들기와 함수, 특수한 메소드  (0) 2022.10.13