range()의 step에서 정수 말고 float을 쓰려면?
조회수 38661회
range()를 써서 0부터 1까지 0.1씩 증가할 수 있나요?
range(0,1,0.1)
로 쓰니까 step은 integer만 받을 수 있다고 하네요.
소스코드
for i in range(0, 1, 0.1):
print i
에러내용
for i in range(0,1,0.1): TypeError: range() integer step argument expected, got float.
2 답변
-
range
,xrange
모두step
에는int
값만을 받을 수 있기 때문에, 다른 방법을 써야 합니다.1. NumPy library사용
NumPy는 파이썬 표준 라이브러리는 아니지만
range()
와 비슷한 기능의 arange()에서step
에float
을 허용합니다.import numpy mylist = numpy.arange(0, 1, 0.1) print mylist #[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
2. 유저 스스로 generator를 정의하는 방법
def myrange(start, end, step): r = start while(r<end): yield r r += step for i in myrange(0,1,0.1): print i
이 방법은 for i in myrange()에서는 정상적으로 일하는 것처럼 보이지만, 리스트로 저장하는 경우에는 round-off 오차가 발생하니 주의해서 써야 합니다.
mylist = [ i for i in myrange(0,1,0.1)] print mylist #[0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]
-
The main limitation of python’s range() is it works only with integers. Python range() doesn’t support the float type.
I am not writing code here this article explained in the best way. you need to write your custom range() function which returns a range of float numbers. Python range() for float numbers
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력