我该怎么做才能修复代码以使嵌套循环在python中起作用

时间:2019-07-29 17:21:28

标签: python-3.x

对于picture 1list1 = [1,2,3,4],代码按预期工作。然而, 当我更改list1 = [1,8,6,4]时,result也更改了。

嵌套循环有问题吗?

2 个答案:

答案 0 :(得分:0)

似乎您在混淆列表中的索引和数字的值。

让我向您解释您的代码。我已经以一种简化的方式重写了您的代码:

代码示例1:

list1 = [1,2,3,4]
x = 0

for i, val in enumerate(list1):
    if val == list1[-1]:
        break

    x+=val
    y = 0

    for j in list1[val:]:
        y+=j

    print('(x, y):', (x,y))

结果:

(x, y): (1, 9)
(x, y): (3, 7)
(x, y): (6, 4)

代码示例2:

list1 = [1,8,6,4]
x = 0

for i, val in enumerate(list1):
    if val == list1[-1]:
        break

    x+=val
    y = 0

    for j in list1[val:]:
        y+=j

    print('(x, y):', (x,y))

结果:

(x, y): (1, 18)
(x, y): (9, 0)
(x, y): (15, 0)

请注意,在您的原始代码的这一部分中,您使用列表中的值而不是要使用的索引对列表进行切片:

# from original code
for j in list1[gt1:]:
        y+=j

列表list1 = [1,8,6,4]使得您可以使用超出列表中最大索引的值对列表进行切片,因此得出的总和为零。

更正此结果时,请观察结果:

# CORRECT CODE
list1 = [1,2,3,4]
x = 0

for i, val in enumerate(list1):
    if val == list1[-1]:
        break

    x+=val
    y = 0

    for j in list1[i:]: #NOTICE THE CORRECTION
        y+=j

    print('(x, y):', (x,y))

print("\n-----------------\n")

list1 = [1,8,6,4]
x = 0

for i, val in enumerate(list1):
    if val == list1[-1]:
        break

    x+=val
    y = 0

    for j in list1[i:]: #NOTICE THE CORRECTION
        y+=j

    print('(x, y):', (x,y))

结果:

(x, y): (1, 10)
(x, y): (3, 9)
(x, y): (6, 7)

-----------------

(x, y): (1, 19)
(x, y): (9, 18)
(x, y): (15, 10)

我希望这会有所帮助!

答案 1 :(得分:0)

用i:代替gt1:,它应该可以工作。 for j in list1[i:]: