Итерация в замкнутом диапазоне [a, b] в python

Я хочу перебрать закрытый диапазон целых чисел [a, b] в python, т.е. итерация от а до б, включая и а и б.

Я знаю следующий способ сделать это:

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, которое можно использовать для перебора закрытых диапазонов без ручного вмешательства в границы?

1 ответ

Очень просто определить свою собственную функцию и использовать ее:

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]

Сохраните в.py файл в \PythonXX\Lib\site-packages, а затем вы можете импортировать его для использования в другом месте.

Другие вопросы по тегам