반응형
range 함수
# range 함수를 이용한 리스트 생성
# 5부터 9까지 생성
a = list(range(5,10))
# 0부터 10까지 3씩 건너뛰며 생성
b = list(range(0,10,3))
# -10부터 -100까지 -30씩 건너뛰며 생성
c = list(range(-10,-100,-30))
print(a)
print(b)
print(c)
시퀀스의 인덱스들로 이터레이트
a = ['a','b','c','d']
for i in range(len(a)):
print(i,a[i])
하지만 이 경우, enumerate 함수를 쓰는것이 편합니다.
enumerate_a = list(enumerate(a))
print(enumerate_a)
많은 경우 range()가 리턴하는 객체는 리스트 처럼 동작하지만, 리스트가 아닙니다.
이터레이트 할 때 원하는 시퀀스 항목을 순서대로 돌려주지만, 실제로 리스트를 만들지는 않기 때문에, 공간을 절약합니다.
이러한 객체를 iterable 이라고 부릅니다.
eval 함수
매개변은 문자열 식을 코드처럼 실행해주는 함수
# 결과 : 3
eval("1+2")
# 결과 : 8
eval("abs(-8)")
사용할 수 있는 예로. 백준 11382번 https://www.acmicpc.net/problem/11382이 있습니다.
이 문제의 경우 eval() 을 사용해 간단하게 풀 수 있습니다.
eval()을 사용하지 않는 경우에는 아래와 같이 풀 수 있습니다.
한 가지 문제를 더 살펴보겠습니다.
백준 25304번 입니다. https://www.acmicpc.net/problem/25304
이 문제 또한 eval을 활용해서 영수증 각 항목의 가격과 수량을 곱할 수 있습니다.
total,total_price=int(input()),0
for i in range(int(input())):
# 입력받은 문자열에서 공백을 곱하기로 변경한 후, eval함수로 연산 수행
total_price+=eval(input().replace(' ','*'))
# 두 값이 같거나 다름을 출력
print(['No','Yes'][total==total_price])
감사합니다.
반응형