2012-01-02 8 views

답변

5
startValue = -1.0 
intervalLength = 2.0 
numberOfSteps = 14 
increasePerStep = intervalLength/numberOfSteps 

print startValue 

x = startValue 
for i in range (numberOfSteps): 
    x += increasePerStep 
    print x 


-1.0 
-0.857142857143 
-0.714285714286 
-0.571428571429 
-0.428571428571 
-0.285714285714 
-0.142857142857 
-2.22044604925e-16 
0.142857142857 
0.285714285714 
0.428571428571 
0.571428571429 
0.714285714286 
0.857142857143 
1.0 
+0

마이클, 왜 이걸 지우셨습니까? 나는 이것을 사용하고 그것이 작동하는 것 같습니다. 이 문제가 잠재적 인 문제입니까? : O –

+1

@ JoanVenge 나는 문제를 보았다가 1 분 전에 재검사를했는데 아무런 문제가 없다는 것을 알았 기 때문에 그것을 삭제했다. –

+0

고마워, 난 이런 멋진 트릭을 좋아해. –

11

에는 내장 된 솔루션, 그러나 아마 당신의 자신의 range 함수를 정의하는 것입니다 해결하는 좋은 방법은 없습니다 :

def my_range(start, end, how_many): 
    incr = float(end - start)/(how_many - 1) 
    return [start + i*incr for i in range(how_many)] 

을 그리고 당신이에 대한 루프에서 사용할 수 있습니다 :

>>> for i in my_range(-1, 1, 10): 
... print i 
... 
-1.0 
-0.777777777778 
-0.555555555556 
-0.333333333333 
-0.111111111111 
0.111111111111 
0.333333333333 
0.555555555556 
0.777777777778 
1 

편집 : @NiklasBaumstark 제안으로 당신의 새로운 my_range 함수는 숫자의 큰 양을 처리 할 것입니다 경우, 그것은 아마도 generators을 사용하는 것이 좋습니다. 이를 위해, 우리는 조금 수정 할 수 있습니다 :

def my_xrange(start, end, how_many): 
     incr = float(end - start)/(how_many - 1) 
     return (start + i*incr for i in xrange(how_many)) 
+6

임시 목록 만들기 –

+0

@NiklasBaumstark : 네가 맞아. 내 대답에 그것을 추가 할께. – juliomalegria

11

numpy를 사용 할 수있는 상태인지를,이 잘 작동합니다 :

import numpy as np 
n = 21 

for i in np.linspace(-1, 1, n): 
    print i 
3

나는

for x in xrange(n): 
    print float(2*x)/(n-1) - 1 
으로 갈 것

두 가지 관심 분야 : xrangerange보다 효율적이며 두 개의 분리 된 반복자 변수를 가진다.

당신은 당신이 자주 유용 경우 기능이 포장 수 :

def linspace1(n): 
    for x in xrange(n): 
     yield float(2*x)/(n-1) - 1 

당신은 아마 julio.alegria의 대답처럼,뿐만 아니라 하부 및 상부 한계 매개 변수를 만들 싶어하지만.

2

당신은 답을 갖고 있다고 말했지만, 이것이 우아한 해결책이라고 생각합니다. 또한 이상한 부동 소수점 문제 (정의 된 범위 이상)의 가능성을 제거합니다. 그것은 생성자의 힘과 유연성을 문자열 포맷팅과 부동 소수점 값과 결합합니다. 또는 Decimal 모듈을 사용하기로 결정한 경우이 부분을 많이 피할 수는 있지만 조금 더 조정해야합니다.

def decimal_stepper(start, end, step=0.1): 
    while start <= end: 
     yield float(start) 
     start = float(('%' + str(step) + 'f') % (start+step)) 

예 실행 :

myVals = decimal_stepper(-1, 1) 
for x in myVals: 
    print x 

출력 :

-1.0 
-0.9 
-0.8 
-0.7 
-0.6 
-0.5 
-0.4 
-0.3 
-0.2 
-0.1 
0.0 
0.1 
0.2 
0.3 
0.4 
0.5 
0.6 
0.7 
0.8 
0.9 
1.0 
관련 문제