기본적으로 내가 포함 n
단계 1 -1로 가고 싶어 -1과 1 :파이썬에서이 루프를 작성하는 가장 우아한 방법은 무엇입니까?
x = -1.0
n = 21
for i in range(n):
print x
x += 0.01
-1.0 -0.9 -0.8 ... 0.8 0.9 1.0
가 어떻게 어떤 n
값에 대한 가장 우아한, 간단한 방법이 쓸 수?
기본적으로 내가 포함 n
단계 1 -1로 가고 싶어 -1과 1 :파이썬에서이 루프를 작성하는 가장 우아한 방법은 무엇입니까?
x = -1.0
n = 21
for i in range(n):
print x
x += 0.01
-1.0 -0.9 -0.8 ... 0.8 0.9 1.0
가 어떻게 어떤 n
값에 대한 가장 우아한, 간단한 방법이 쓸 수?
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
마이클, 왜 이걸 지우셨습니까? 나는 이것을 사용하고 그것이 작동하는 것 같습니다. 이 문제가 잠재적 인 문제입니까? : O –
@ JoanVenge 나는 문제를 보았다가 1 분 전에 재검사를했는데 아무런 문제가 없다는 것을 알았 기 때문에 그것을 삭제했다. –
고마워, 난 이런 멋진 트릭을 좋아해. –
에는 내장 된 솔루션, 그러나 아마 당신의 자신의 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))
임시 목록 만들기 –
@NiklasBaumstark : 네가 맞아. 내 대답에 그것을 추가 할께. – juliomalegria
이 numpy
를 사용 할 수있는 상태인지를,이 잘 작동합니다 :
import numpy as np
n = 21
for i in np.linspace(-1, 1, n):
print i
나는
for x in xrange(n):
print float(2*x)/(n-1) - 1
으로 갈 것
두 가지 관심 분야 : xrange
은 range
보다 효율적이며 두 개의 분리 된 반복자 변수를 가진다.
당신은 당신이 자주 유용 경우 기능이 포장 수 :
def linspace1(n):
for x in xrange(n):
yield float(2*x)/(n-1) - 1
당신은 아마 julio.alegria의 대답처럼,뿐만 아니라 하부 및 상부 한계 매개 변수를 만들 싶어하지만.
당신은 답을 갖고 있다고 말했지만, 이것이 우아한 해결책이라고 생각합니다. 또한 이상한 부동 소수점 문제 (정의 된 범위 이상)의 가능성을 제거합니다. 그것은 생성자의 힘과 유연성을 문자열 포맷팅과 부동 소수점 값과 결합합니다. 또는 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
관련 질문 : http://stackoverflow.com/questions/8652006 당신은 정말 대신이 발전기를 사용해야합니다 – juliomalegria