Pythonic способ перебора диапазонов, когда порядок не известен - PullRequest
4 голосов
/ 03 июня 2019

Скажем, у меня есть 2 переменные x и y, и я хочу перебрать все промежуточные значения, не зная, больше ли x или y:

if(x>y):
  for i in range(y,x):
    #Code

elif(x<y):
  for i in range(x,y):
    #Code

Как Pythonic делает это без всех условий if-else? Порядок не имеет значения по убыванию или по возрастанию, но общий ответ был бы отличным!

Ответы [ 5 ]

8 голосов
/ 03 июня 2019

Как насчет:

for i in range(min(x,y), max(x,y)):
    ...
5 голосов
/ 03 июня 2019

Другой способ - использовать sorted с распаковкой :

x, y = 10, 1
for i in range(*sorted([x,y])):
    print(i)

Вывод:

1
2
3
...
4 голосов
/ 03 июня 2019

Как насчет сортировки их заранее?

smaller, larger = sorted((a,b))
for elem in range(smaller, larger):
    # ...

или короче:

for elem in range(*sorted((a,b))):
    # ...
3 голосов
/ 03 июня 2019

Просто используйте min и max:

for i in range( min(x,y), max(x,y) ):
    ...
3 голосов
/ 03 июня 2019

Вы можете проверить max и min:

def custom_range(x, y):
    M, m = max(x, y), min(x, y)
    yield from xrange(m, M) # or range in python3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...