Contents
접기
Comprehension
하나 이상의 iterator로부터 파이썬의 자료구조를 만드는 방법
1) List Comprehension
append() 이용 / range() 이용
[ 표현식 for 항목 in 순회 가능한 객체 ]
[ 표현식 for 항목 in 순회 가능한 객체 if 조건 ]
2) Dictionary Comprehension
List Comprehension 와 같이 if, for .. 다중 절을 가질 수 있다.
{ 키 표현식 : 값 표현식 for 항목 in 순회 가능한 객체 }
3) Set Comprehension
{ 표현식 for 항목 in 순회 가능한 객체 }
tmp = {1,3,5,6,8,44,6,88,3,34}
a = [i for i in tmp if not i%2] # 짝수이면
print(a)
# [34, 6, 8, 44, 88]
# 같은 형식
# dob_list = [[0,0,0,0,0,0,0],
# [0,0,0,0,0,0,0],
# [0,0,0,0,0,0,0],
# [0,0,0,0,0,0,0]]
dob_list = [[ 0 for col in range(7) ]for row in range(4)]
print(dob_list)
# [[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]
# 전 노래 가사 활용 코드
mydic= { word:word_list.count(word) for word in word_list }
print(mydic)
{'hello,': 3, "it's": 3, ...}
[ 문제 ] 1~ 100까지 1씩 증가하는 데이터를 발생하여 3의 배수이거나 5의 배수인 데이터만 리스트에 포함하세요
l = list(x for x in range(1,101) if (x%3==0) or (x%5 == 0))
print(l)
# 교수님코드
t = [i for i in range(1,101) if not i%3 or not i%5 ]
print(t)
# [3, 5, 6, 9, 10, 12, ...]
zip()
여러 시퀀스를 병렬로 순회하는 함수. 여러 시퀀스 중 가장 짧은 시퀀스가 완료되면 멈춘다.
두 개 이상의 리스트, 튜플의 값을 병렬적으로 추출할때 사용한다.
data1 =[1,2,3,4,5]
data2 = [10,20,30,40,50]
data3 = [100,200,300,400]
result1 = [x for x in zip(data1,data2)]
print(result1)
result2 = [ sum(x) for x in zip(data1, data2, data3)]
print(result2)
# [(1, 10), (2, 20), (3, 30), (4, 40), (5, 50)]
# [111, 222, 333, 444]
yoil = ["월","화","수","목","금","토","일"]
food = ["갈비탕","순대국","칼국수","삼겹살"]
menu = zip(yoil,food)
for y , f in menu:
print("%s요일 메뉴 %s " %(y,f))
# 월요일 메뉴 갈비탕
# 화요일 메뉴 순대국
# 수요일 메뉴 칼국수
# 목요일 메뉴 삼겹살
d = dict(zip(yoil,food))
print(d)
# {'월': '갈비탕', '화': '순대국', '수': '칼국수', '목': '삼겹살'}
enumerate()
순서값과 요소값 둘을 한 번에 구해주는 내장함수
리스트의 순서값과 요소값을 튜플{}로 묶은 컬렉션을 리턴한다.
yoil = ["월","화","수","목","금","토","일"]
# eenumerate 의 두 번째 인수로 시작값을 지정
for i,item in enumerate(yoil,1):
print(i,item)
# 1 월
# 2 화
...
# 실제 데이터 ->
color = ["빨강", "주황","노랑","초록","파랑"]
# 바뀌어야 할 key = 색명
map_data = { v:i for i,v in enumerate(color)}
print(map_data)
# {'빨강': 0, '주황': 1, '노랑': 2, '초록': 3, '파랑': 4}
[문제] 리스트 x와 y를 이용하여 리스트 z와 같은 결과가 나오도록 하세요.
x = [[1,2,3],[4,5,6]] , y = [[11,12,13],[14,15,16]]
z = [[12,14,16][18,20,22]]
hint : list comprehension(), zip() 활용 서로 상응 하는 숫자끼리 더하는 것
x = [[1,2,3],[4,5,6]]
y = [[11,12,13],[14,15,16]]
# print(list(zip(x,y))) 확인용
#z = [[sum(i) for i in zip(x[0],y[0])]for j in zip(x[1],y[1])]
# : 내가 한거 > 틀린 문장 : 아직 comprehension이 익숙하지 않아 힘들었다.
z = [ [sum(c) for c in zip(a,b) ] for a,b in zip(x,y)]
# 오른쪽 for문 : [([1, 2, 3], [11, 12, 13]), ([4, 5, 6], [14, 15, 16])]
# c--> [(1,11),(2,12),(3,13),...]
print(z)
'국비 교육 > 파이썬' 카테고리의 다른 글
[파이썬] 함수 - 2 (0) | 2023.11.05 |
---|---|
[파이썬] 함수 -1 (0) | 2023.11.05 |
[파이썬] 딕셔너리 Dictionary , 튜플 Tuple, 집합 Set (0) | 2023.11.05 |
[파이썬] List (0) | 2023.11.04 |