kri*_*s89 10 python iterator loops range xrange
我想在python中迭代一个闭合范围的整数[a,b],即.从a到b迭代,包括a和b.
我知道以下方法:
for i in range(a, b+1):
do_something(i)
Run Code Online (Sandbox Code Playgroud)
为了反向迭代(即按b,b-1,b-2,...,a的顺序),我执行以下操作:
for i in range(b, a-1, -1):
do_something(i)
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个加法(在示例中为b + 1)和减法(在示例中为a-1)以达到范围的闭合端.我发现它的可读性低于c/c ++/Java对应物(<=在循环中的使用).
你有没有python中的东西可以用于在封闭范围之间迭代而无需人工干预边界?
定义自己的函数并使用它很简单:
def closed_range(start, stop, step=1):
dir = 1 if (step > 0) else -1
return range(start, stop + dir, step):
Run Code Online (Sandbox Code Playgroud)
实际上:
>>> list(closed_range(1, 10))
0: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(closed_range(1, 10, 2))
1: [1, 3, 5, 7, 9]
>>> list(closed_range(1, 10, 3))
2: [1, 4, 7, 10]
>>> list(closed_range(10, 1, -1))
3: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> list(closed_range(10, 1, -2))
4: [10, 8, 6, 4, 2]
Run Code Online (Sandbox Code Playgroud)
保存到\ PythonXX \ Lib \ site-packages中的.py文件,然后可以将其导入以在其他地方使用。