顺序未知时在范围上进行迭代的Pythonic方法

时间:2019-06-03 10:59:55

标签: python python-3.x loops

假设我有2个变量xy,并且我想遍历两者之间的所有值,而又不知道xy是否更大:

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

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

在没有所有if-else条件的情况下,用Python的方式可以做到这一点吗?顺序无关紧要,降序或升序都可以,但是一般的答案会很好!

5 个答案:

答案 0 :(得分:8)

怎么样:

for i in range(min(x,y), max(x,y)):
    ...

答案 1 :(得分:5)

另一种方法是将sortedunpacking一起使用:

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

输出:

1
2
3
...

答案 2 :(得分:4)

如何对它们进行预先排序?

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

或更短:

for elem in range(*sorted((a,b))):
    # ...

答案 3 :(得分:3)

您可以检查maxmin

def custom_range(x, y):
    M, m = max(x, y), min(x, y)
    yield from xrange(m, M) # or range in python3

答案 4 :(得分:3)

只需使用minmax即可:

for i in range( min(x,y), max(x,y) ):
    ...