range()의 step에서 정수 말고 float을 쓰려면?


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.

  • 2016년 01월 25일에 작성됨

조회수 306


1 답변


좋아요
0
싫어요
채택취소하기

range, xrange모두 step에는 int값만을 받을 수 있기 때문에, 다른 방법을 써야 합니다.

1. NumPy library사용

NumPy는 파이썬 표준 라이브러리는 아니지만 range() 와 비슷한 기능의 arange()에서 stepfloat을 허용합니다.

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]
  • 2016년 01월 25일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close