【发布时间】:2020-05-12 04:00:29
【问题描述】:
我发现当我在 for 循环中使用 'pop' 时,它可能会出错,例如 'list index out of range in Python'。因为删除一个索引会使列表变短。
并且还发现如果我使用某种反转范围,我可以修复这个错误。 但是当我尝试应用我在 Stack Overflow 上学到的知识时,我仍然无法解决这个问题。
例如
candidates = []
def make_candidates(user_group, ban_group):
for i in range(len(user_group)-1, -1, -1):
for j in range(len(ban_group)):
if len(user_group[i]) == len(ban_group[j]):
candidates.append(user_group.pop(i))
return candidates
print(make_candidates(["frodo", "fradi", "crodo", "abc123", "frodoc"], ["*rodo", "*rodo", "******"]))
范围是 (4, -1, -1),所以 'i' 是 4 到 0。
当 'i=4, j=2', len(user_gorup[4]) == len(ban_group[2])) -> 候选者 = ["frodoc"] -> user_group = ["frodo", " fradi", "crodo", "abc123"]
当 'i=3, j=2', len(user_group[3]) == len(ban_group[2])) -> 候选人 = ["frodoc", "abc123"] -> user_group = [" frodo”、“fradi”、“crodo”]
这样,就没有 out of list 索引了。当范围变短时,列表也变短,所以没有问题。不是吗?为什么还会出现错误?
【问题讨论】:
-
这个算法试图做什么?返回一组禁止候选人?
-
您尝试执行的实际计算是什么?您真的需要更改
user_group吗?candidates之后应该是什么? -
在循环遍历列表时,切勿使用要销毁的列表的索引。将第一个
for循环替换为while循环:while user_group:然后user = user_group.pop()并在有user_group[i]或user_group.pop()的任何地方使用user