【问题标题】:Pythonic way of iterating over ranges when order is not known当顺序未知时迭代范围的 Pythonic 方式
【发布时间】:2019-10-18 22:14:20
【问题描述】:

假设我有 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 条件的Pythonic 方法是什么?顺序无所谓降序或升序,但一般的答案会很棒!

【问题讨论】:

    标签: python python-3.x loops


    【解决方案1】:

    怎么样:

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

    【讨论】:

      【解决方案2】:

      您可以查看maxmin

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

      【讨论】:

        【解决方案3】:

        只需使用minmax

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

        【讨论】:

          【解决方案4】:

          另一种方法是使用sortedunpacking

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

          输出:

          1
          2
          3
          ...
          

          【讨论】:

            【解决方案5】:

            先把它们分类怎么样?

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

            或更短:

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

            【讨论】:

            • 我喜欢描述性的变量名称。
            猜你喜欢
            • 2016-11-17
            • 1970-01-01
            • 2019-08-18
            • 2010-11-21
            • 2021-11-04
            • 2011-04-19
            • 1970-01-01
            • 2016-01-21
            • 2018-11-28
            相关资源
            最近更新 更多