为什么我的代码打印 2 个不同的数字?他们应该是一样的

问题描述 投票:0回答:1

“seq”列表不会有重复的数字,并且长度永远不会超过 9。我试图让我的代码返回给定列表中 0-9 中缺失的整数。我决定通过每次系统找到匹配的数字时从整数“清单”中删除一个数字来做到这一点。不知何故,第 7 行中的 IF 语句在技术上是错误的时候却成功地被调用了。

def get_missing_element(seq):
    missing = None
    i = 0
    f = 0
    checklist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    while f < len(checklist):
        if checklist[f] == seq[i]:
            checklist.remove(checklist[f])
            print("i see", seq[i])
            print("removed", checklist[f])
            i = i + 1
            f = 0
        f = f + 1
    return missing
seq = [1, 8, 2, 3, 4, 5, 0, 7, 9]
print(get_missing_element(seq))

我一开始尝试使用For循环,但我不知道如何在不使用while循环的情况下让For循环重复自身。我的问题的根源是否在于我在这里使用 while 循环?

python while-loop
1个回答
0
投票

代码中的问题在于您在迭代清单时修改清单的方式。当您从清单中删除一个元素时,其余元素的索引会发生变化。这可能会导致循环跳过元素或出现意外行为。此外,该代码不处理在清单中找不到 seq 中的数字的情况。

您可以使用更简单的方法,而不是从清单中删除元素。由于 seq 包含唯一的数字,并且其长度始终小于或等于 9,因此您只需求出 0 到 9 之间的数字之和,然后减去 seq 中的元素之和即可。差异将是缺少的数字。

def get_missing_element(seq):
    total = sum(range(10))  # Sum of numbers from 0 to 9
    return total - sum(seq)  # The missing number is the difference

# Test the function
seq = [1, 8, 2, 3, 4, 5, 0, 7, 9]
print(get_missing_element(seq))

这种方法更有效,并且避免了在迭代列表时修改列表的复杂性。

© www.soinside.com 2019 - 2024. All rights reserved.