python - 在python中的封闭范围[a,b]中迭代

标签 python loops iterator range xrange

我想在 python 中迭代整数的封闭范围 [a, b],即。从 a 迭代到 b,包括 a 和 b。

我知道以下方法:

for i in range(a, b+1):
    do_something(i)

为了反向迭代(即按 b、b-1、b-2、...、a 的顺序),我执行以下操作:

for i in range(b, a-1, -1):
    do_something(i)

我不喜欢这种加法(示例中的 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):

在行动中:

>>> 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]

保存到\PythonXX\Lib\site-packages 中的 .py 文件,然后您可以将其导入以在其他地方使用。

关于python - 在python中的封闭范围[a,b]中迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16135509/

相关文章:

winforms - 在无限循环中启动脚本并可能停止脚本

javascript - 使用拼接替换所有找到的项目

c++ - range-v3:调整已经实现迭代器接口(interface)的自定义类(开始/结束)

python - 将列表与 DataFrame 中的每条记录进行比较

python - 存储 ENUM 值的 PostgreSQL ARRAY

java - 如何让我的代码运行直到我输入数字

c++ - 如何打印通用std::list迭代器?

c++ - 如何获得二维 vector 中所有整数的最大值?

python - 使用 django-simple-captcha,当表单 is_valid 时为什么 human = True

python - python2.7中递归函数的执行顺序