【问题标题】:Passing a variable to iteration variable after break statement在 break 语句后将变量传递给迭代变量
【发布时间】:2021-05-16 14:55:30
【问题描述】:

如何使迭代变量i 在跳出循环后取变量lc 的值?谢谢你。代码如下:

a = [155, 157, 83, 121, 112, 137, 129, 159]
b = [145, 148, 66, 117, 101, 131, 107, 153]

i = 0
high = a[0]
while i < len(a):
    if a[i] > high:
        high = a[i]
        for j in range(i, len(a)):
            if a[j] > high:
                lv = min(b[i:j])
                lc = b.index(lv, i, j)
                dd = (lv/high-1)*100
                print(high, lv, dd)
                high = a[lc]
                break
    i += 1

【问题讨论】:

  • i = lc 放在break 之前有什么问题?
  • 我试过了,还是不行。顺便说一句,谢谢你的回答。
  • 还可以考虑重构以使用更具pythonic的for x in y而不是使用索引。
  • 怎么会不行呢?这正是你所要求的。也许那不是你真正想要的。你需要这个来代替i += 1吗?
  • @DinDin224 你能解释一下这段代码应该实现什么吗?可能有更简单的解决方案。

标签: python loops for-loop while-loop iteration


【解决方案1】:

你的代码:

a = [155, 157, 83, 121, 112, 137, 129, 159]
b = [145, 148, 66, 117, 101, 131, 107, 153]

i = 0
high = a[0]
while i < len(a):
    print(i, end=', ')
    if a[i] > high:
        high = a[i]
        for j in range(i, len(a)):
            if a[j] > high:
                lv = min(b[i:j])
                lc = b.index(lv, i, j)
                dd = (lv/high-1)*100
                # print(high, lv, dd)
                high = a[lc]
                break
    i += 1

输出:

0, 1, 2, 3, 4, 5, 6, 7, 

你是这个意思吗?

i = 0
high = a[0]
while i < len(a):
    print(i, end=', ')
    flag_add = False
    if a[i] > high:
        high = a[i]
        for j in range(i, len(a)):
            if a[j] > high:
                lv = min(b[i:j])
                lc = b.index(lv, i, j)
                dd = (lv/high-1)*100
                # print(high, lv, dd)
                high = a[lc]
                flag_add = True
                break
        i = lc if flag_add else i
    i += 1

输出:

0, 1, 3, 5, 7, 

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多