在Python中编写for循环的最优雅方法是什么?

Joa*_*nge 5 python math loops for-loop

基本上我想逐步从-1到1 n,包括-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
Run Code Online (Sandbox Code Playgroud)

如何以最优雅,最简单的方式为任何n价值写这个?

jul*_*ria 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)]
Run Code Online (Sandbox Code Playgroud)

你可以在for循环中使用它:

>>> 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
Run Code Online (Sandbox Code Playgroud)

编辑:正如@NiklasBaumstark所说,如果你的全新my_range功能将处理大量数字,那么使用发电机可能是个好主意.为此,我们只做一点修改:

def my_xrange(start, end, how_many):
        incr = float(end - start)/(how_many - 1)
        return (start + i*incr for i in xrange(how_many))
Run Code Online (Sandbox Code Playgroud)

  • 您应该在那里使用生成器而不是创建临时列表. (6认同)

Ósc*_*pez 11

如果可以使用numpy,这可以正常工作:

import numpy as np
n = 21

for i in np.linspace(-1, 1, n):
    print i
Run Code Online (Sandbox Code Playgroud)


Mic*_*ski 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
Run Code Online (Sandbox Code Playgroud)