“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 循环?
代码中的问题在于您在迭代清单时修改清单的方式。当您从清单中删除一个元素时,其余元素的索引会发生变化。这可能会导致循环跳过元素或出现意外行为。此外,该代码不处理在清单中找不到 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))
这种方法更有效,并且避免了在迭代列表时修改列表的复杂性。