■ 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 = ['월', '화', '수', '목', '금', '토', '일']
# enumerate()의 두 번째 인수로 시작값을 지정할 수 있다
for i, item in enumerate(yoil, 1):
print(i, item)
1 월
2 화
3 수
4 목
5 금
6 토
7 일
color = ['빨강', '주황', '노랑', '초록', '파랑']
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(c) for c in zip(a,b)] for a, b in zip(x,y)]
# c --> [(1,11), (2,12), (3,13)]
print(z)
[([1, 2, 3], [11, 12, 13]), ([4, 5, 6], [14, 15, 16])]
[[12, 14, 16], [18, 20, 22]]
[문제] 목표 날짜 구하기
- 사용자로부터 입력 받은 기준 날짜로부터 며칠이 경과된 목표 날짜를 계산하는 프로그램을 작성하세요.
[예시]
연도를 입력해 주세요: 2019
월을 입력해 주세요: 2
일을 입력해 주세요: 5
며칠째 되는 날을 구하고 싶은가요? 10
2019년 2월 5일로부터 10일째 되는 날은 2019년 2월 10일입니다.
from datetime import datetime, timedelta
year = int(input("연도를 입력해 주세요: "))
month = int(input("월을 입력해 주세요: "))
day = int(input("일을 입력해 주세요: "))
new_day = int(input("며칠째 되는 날을 구하고 싶은가요? "))
start_date = datetime(year, month, day)
target_date = start_date + timedelta(days=new_day)
print(f"{year}년 {month}월 {day}일로부터 {new_day}일째 되는 날은 {target_date.year}년 {target_date.month}월 {target_date.day}일입니다.")
연도를 입력해 주세요: 2023
월을 입력해 주세요: 10
일을 입력해 주세요: 23
며칠째 되는 날을 구하고 싶은가요? 10
2023년 10월 23일로부터 10일째 되는 날은 2023년 11월 2일입니다.
year = int(input('연도를 입력해 주세요: '))
month = int(input('월을 입력해 주세요: '))
day = int(input('일을 입력해 주세요: '))
new_day = int(input('며칠째 되는 날을 구하고 싶은가요? '))
for days in range(new_day):
day += 1
if (month == 4 or month == 6 or month == 9 or month == 11) and day > 30:
day = 1
month += 1
elif month == 2:
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
if day > 29:
day = 1
month += 1
else:
if day > 28:
day = 1
month += 1
else:
if day > 31:
day = 1
month += 1
if month > 12:
month = 1
year += 1
print(f'{year}년 {month}월 {day}일로부터 {new_day}일째 되는 날은 {year}년 {month}월 {day}일입니다.')
연도를 입력해 주세요: 2023
월을 입력해 주세요: 12
일을 입력해 주세요: 20
며칠째 되는 날을 구하고 싶은가요? 20
2024년 1월 9일로부터 20일째 되는 날은 2024년 1월 9일입니다.
year = int(input('연도를 입력해 주세요: '))
month = int(input('월을 입력해 주세요: '))
day = int(input('일을 입력해주세요: '))
count = int(input('며칠째 되는 날을 구하고 싶은가요?'))
dayInMonth = [31,28,31,30,31,30,31,31,30,31,30,31]
max_date = 0
passed = 0 # 지나간 일수를 위한 변수
if month == 2:
max_date = 29 if (year % 4 == 0 and year % 100 !=0) or year % 400 ==0 else 28
else:
max_date = dayInMonth[month-1]
if count <= count - (max_date-day): #남은 일수보다 입력 받은 일수가 같거나 작으면 그냥 더해짐
print(f'{count}일 후 의 날짜는 {year}년 {month}월은 {day+count}입니다')
else: # 무조건 달이 넘어간다는 소리임
passed = count - (max_date-day)
while(1):
month += 1
if month == 2:
max_date = 29 if (year % 4 == 0 and year % 100 !=0) or year % 400 ==0 else 28
elif month > 12:
year += 1
month = 1
max_date = dayInMonth[month -1]
else:
max_date = dayInMonth[month -1]
if passed > max_date:
passed -= max_date
else:
day = passed
break
print(f'{count}일 후 의 날짜는 {year}년 {month}월은 {day}입니다')
연도를 입력해 주세요: 2023
월을 입력해 주세요: 12
일을 입력해주세요: 20
며칠째 되는 날을 구하고 싶은가요? 20
20일 후 의 날짜는 2024년 1월은 9입니다
'프로그래밍 언어 > Python' 카테고리의 다른 글
[Python] Collection - Set (1) | 2023.10.27 |
---|---|
[Python] Comprehension (List, Dictionary, Set) (0) | 2023.10.27 |
[Python] 함수 (0) | 2023.10.26 |
[Python] 매개변수 (0) | 2023.10.26 |
[Python] Filter, Map, Reduce (1) | 2023.10.26 |