首页 > 解决方案 > 在 for 和 while 循环中建立索引

问题描述

在使用列表时,我对 python 中的循环实现感到困惑。

示例:此实现总是抛出列表索引超出范围错误,因为列表在每次迭代中都不同,并且 len(intervals) 总是改变。

for i in range(len(intervals1)):
    for k in range(len(intervals2)):
        if intervals1[i] == intervals2[k]:
            count += 1
        else:
            intervals2.pop(k)

而第二个实现是

for i in intervals1:
    for k in intervals2:
        if i == k:
            count += 1
        else:
            intervals2.remove(k)

第二个实现工作正常,但第一个总是失败。我认为当我们从列表中删除/弹出某些内容或修改列表中的元素数量时,我们永远不能使用索引方法。

如果我们想在第一个实现中使用索引方法,有人可以提供一种解决方法。

我发现的一种实现是使用 while 循环,为什么即使它使用基于索引的方法但 for 循环失败,它也能工作 -

intervals1 = [1,2,3,4,5,6]

intervals2 = [4,5,6,7,8,9]

i=0
while i < len(intervals2):
    if intervals1[i] == intervals2[i]:
        count +=1

    else:
        intervals2.pop(i)
        intervals1.pop(i)

   print(intervals1)
print(intervals2)  

这不应该也失败,因为它正在动态计算间隔的长度。也许原因是它没有像 for 循环那样使用计数器,但它可以在循环内部使用它。

有人可以解释一下吗。

谢谢。

标签: pythonloopsfor-loopwhile-loop

解决方案


与其弹出元素,不如将所需的元素存储在新列表中弹出会导致此索引错误

intervals1 = [1,2,3,4,5,6]
count=0
intervals2 = [4,5,6,7,8,9]
res=[]
for i in range(len(intervals1)):
    for k in range(len(intervals2)):
        if intervals1[i] == intervals2[k]:
            count += 1
            res.append(intervals2[k])

推荐阅读