【问题标题】:different increment in range in for-loop pandasfor-loop pandas中范围的不同增量
【发布时间】:2021-02-05 09:05:57
【问题描述】:

我有一个循环代码如下:

min = 1
max = 300
inc = 10

for j in range (min,max+inc,inc):
    print(j)

minmax 的增量为 10。有什么方法可以在特定范围内进行增量更改,例如从范围1-100 增量为10101-200 增量为20201-300 增量为30

【问题讨论】:

  • 您能否提供大约 100、200 和 300 的预期值,以便我们了解如何处理边缘情况?

标签: python loops for-loop


【解决方案1】:

您可以使用while 循环来代替for 循环:

min = 1
max = 300
inc = 10

while min <= max+inc:
    print(min)

    if 100 < min <= 200: #define your increment-conditions here
        inc = 20
    elif 200 < min <= 300:
        inc = 30

    min += inc

输出:

1
11
21
31
41
51
61
71
81
91
101
121
141
161
181
201
231
261
291
321

【讨论】:

    【解决方案2】:

    使用生成器生成值,可以在for循环中使用,或者只是将其转换为列表

    # pip install range_key_dict
    from range_key_dict import RangeKeyDict
    
    
    def value_generator(min_value, max_value):
        inc_dict = RangeKeyDict({
            (1, 100): 10,
            (100, 200): 20,
            (200, 300): 30,
        })
        start = min_value
        while start <= max_value:
            inc = inc_dict.get(start, None)
            if inc is None:
                raise StopIteration
            else:
                start += inc
                yield start
    
    
    for j in value_generator(1, 300):
        print(j)
    
    # [11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 141, 161, 181, 201, 231, 261, 291, 321]
    print(list(value_generator(1, 300)))
    

    【讨论】:

      【解决方案3】:

      一般的解决方案可能是:

      incs = [10,20,30]
      pos = [101,201,301]
      m = 1
      for i in range(len(pos)):
          for j in range(m,pos[i],incs[i]):
                  print(j)
                  m = pos[i]
      
      • 您可以编辑增量值,以及与新值相关的位置
      • 位置数组的最后一个元素是停止条件

      【讨论】:

        猜你喜欢
        • 2014-09-21
        • 2015-11-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 2020-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多