python - 在 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 循环那样使用计数器,但它可以在循环内部使用它。
有人可以解释一下吗。
谢谢。
解决方案
与其弹出元素,不如将所需的元素存储在新列表中弹出会导致此索引错误
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])
推荐阅读
- javascript - 如何通过发布请求 api 在 ListView 上显示 json 数据
- javascript - 如何使用 RequireJS ?错误:“尚未为上下文加载模块名称“child_process”:使用 require([])”?
- php - 使用 PHP 删除不在我的 XML 文档中的文件
- html - 导航栏文本的中心,并右对齐。减小页面大小时也保持导航栏完整
- arrays - 具有通用元组元素的 Swift 元组数组
- matlab - 从给定多边形内的数据的 3D 矩阵制作多个图
- excel - 当其他 Excel 实例具有焦点时,无法获取活动工作表或选定范围
- wpf - .net core 3.0 中 WPF 中的图像标记不起作用
- regex - 正则表达式匹配可以嵌套的方括号内的文本块
- php - 根据下拉列表中的选项选择 mysql 数据库