【问题标题】:How to create a dynamic range for loop?如何为循环创建动态范围?
【发布时间】:2019-11-21 01:22:02
【问题描述】:

我的目标是创建一个 Python 循环的动态范围。我知道一旦结束范围只计算一次,当它作为参数传递给范围生成器时。然而,这是一个例子:

i = 1
for i in range(1,i,1):
    print i
    i = i +1

很明显,i=1 会跳过循环。但我希望这个范围根据i参数动态变化。

这是我想使用动态范围的情况:

  1. 我计算一个链路的容量
  2. 我计算该链路的带宽
  3. 我做了一个循环,发送的流量应该等于容量,我称之为过载值。
  4. 增加的范围是从1到过载值。

每次迭代都会计算此重载值,并更新范围。如果理论上说过载值为20,那么范围一直到20。

这是我的代码:

capacity = Router_1.get_tunnel_capacity()
tunnel_bandwidth = Router_1.check_bandwidth_overload()
    if tunnel_bandwidth <= capacity:
        for bandwidth in range(1, range_end, 1):
            os.system('iperf -c ' + server_address + ' -u -p 50001 -b ' + str(bandwidth) + 'M -i 1')
tunnel_bandwidth = Router_1.check_bandwidth_overload()
if tunnel_bandwidth <= capacity:
   # update the range_end according to tunnel_bandwidth

range_end 是范围的动态值。有没有办法让它动态化?

【问题讨论】:

  • 1.还使用变量作为结束参数? 2.在循环内更改i不会有你期望的效果
  • 改用while 循环。

标签: python loops dynamic


【解决方案1】:

使用while 循环而不是for 循环。 这是一个非常基本的示例:

z = 0
range = 10
while z < range:
    print(z)
    if z == 9:
        range = 20
    z += 1

【讨论】:

    【解决方案2】:

    Rob 给出的 while-loop 答案可能是最好的解决方案,因为Python 3 中的 range() 函数返回的是惰性序列对象而不是列表。

    但是,在Python 2 中,当您在 for 循环中调用 range() 时,它会创建一个列表。您可以保存该列表,然后对其进行变异。

    类似这样的:

    count = 10
    r = range(count)
    for i in r:
        newcount = 7
        del r[newcount:]
    

    我不太确定如何增加尺寸,但你明白了。

    【讨论】:

      【解决方案3】:

      如果您想更改for 循环中的range_end,您不能这样做,请尝试使用while 循环。

      【讨论】:

        猜你喜欢
        • 2020-11-15
        • 2015-06-25
        • 1970-01-01
        • 2019-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        • 1970-01-01
        相关资源
        最近更新 更多