为什么for语句以2结尾,而不是以4结尾

  • 本文关键字:结尾 for 语句 python
  • 更新时间 :
  • 英文 :


我编写了如下代码,以便for语句围绕2和4。但我不知道为什么它只以2结尾。

def solution(n, lost, reserve):
for i in lost:
if i - 1 in reserve:
reserve.remove(i - 1)  
lost.remove(i) 
elif i + 1 in reserve:
reserve.remove(i + 1) 
lost.remove(i) 
else:
continue
answer = n - len(lost)
print(answer)
solution(5, [2, 4], [1, 3, 5])

我的代码的哪一部分有问题?

在迭代同一列表时修改该列表通常会导致您意外地"错过";项(因为迭代是通过索引进行的,并且重新排列迭代器下面的项意味着不再保证以原始顺序或任何顺序对它们进行迭代(。一般来说,你应该避免这种情况。

一种解决方案是建立一个要删除的项目列表,然后在迭代完成后删除它们:

def solution(n, lost, reserve):
remove = []
for i in lost:
if i - 1 in reserve:
reserve.remove(i - 1)  
elif i + 1 in reserve:
reserve.remove(i + 1) 
else:
continue
remove.append(i)
for i in remove:
lost.remove(i)
answer = n - len(lost)
print(answer)

这假设从lost中删除项很重要,因为调用者希望它们在调用solution之后消失。如果你只是为了能够从len(lost)中计算answer而删除它们,那么为你从lost中删除的每个项目增加answer会更容易:

def solution(n, lost, reserve):
answer = n - len(lost)
for i in lost:
if i - 1 in reserve:
reserve.remove(i - 1)  
elif i + 1 in reserve:
reserve.remove(i + 1) 
else:
continue
answer += 1
print(answer)

相关内容

最新更新