使用 python 迭代时修改列表

2024-02-10

编辑:当我想修改原始列表时,我知道要迭代列表的副本。然而,我收到的关于在迭代列表时修改列表的错误的唯一解释是“它可能会导致意外的结果”。

考虑以下:

lst = ['a', 'b', 'c', 'd', 'e']
for x in lst:
    lst.remove(x)
print(lst)

这是我尝试解释当一个人在迭代列表时修改列表时实际发生的情况。请注意,line2 相当于for i in range(len(lst)):, 然后len(lst)每次迭代都会减少 1。

len(lst)从 5 开始。

When i = 0, 我们有lst[i] = 'a'被删除,所以lst = ['b', 'c', 'd', 'e']. len(lst)减少到4。

When i = 1, 我们有lst[i] = 'c'被删除,所以lst = ['b', 'd', 'e'] len(lst)减少到3。

When i = 2, 我们有lst[i] = 'e'被删除,所以lst = ['b', 'd']. len(lst)减少到2。

这是我认为会引发 IndexError 的地方,因为i = 2不在range(2)。然而,该程序只是输出['b', 'd']。是不是因为i已经“赶上了”len(lst)?另外,到目前为止我的推理合理吗?


C 实现位于listiter_next函数于列表对象.c https://github.com/python/cpython/blob/master/Objects/listobject.c相关行是

if (it->it_index < PyList_GET_SIZE(seq)) {
    item = PyList_GET_ITEM(seq, it->it_index);
    ++it->it_index;
    Py_INCREF(item);
    return item;
}

it->it_seq = NULL;
Py_DECREF(seq);
return NULL;

如果迭代器仍在范围内,则迭代器返回一个对象 (it->it_index < PyList_GET_SIZE(seq))并返回NONE否则。偏差一百万或一百万并不重要,这都不是错误。

这样做的一般原因是迭代器和可迭代对象可以在多个地方使用(考虑在 for 循环内读取的文件对象)。外循环不应因以下原因而崩溃IndexError只是因为它没有事情可做。改变你正在迭代的对象并不违法或本质上“愚蠢”,只是你需要知道你的行为的后果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python 迭代时修改列表 的相关文章

  • Python 2.7 将比特币私钥转换为 WIF 私钥

    作为一名编码新手 我刚刚完成了教程 教程是这样的 https www youtube com watch v tX XokHf nI https www youtube com watch v tX XokHf nI 我想用 1 个易于阅读
  • 希伯来语中的稀疏句子标记化错误

    尝试对希伯来语使用稀疏句子标记 import spacy nlp spacy load he doc nlp text sents list doc sents I get Warning no model found for he Onl
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 查找模块中显式定义的函数 (python)

    好的 我知道您可以使用 dir 方法列出模块中的所有内容 但是有什么方法可以仅查看该模块中定义的函数吗 例如 假设我的模块如下所示 from datetime import date datetime def test return Thi
  • numpy 使用 datetime64 进行数字化

    我似乎无法让 numpy digitize 与 datetime64 一起使用 date bins np array np datetime64 datetime datetime 2014 n 1 s for n in range 1 1
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • 动态 __init_subclass__ 方法的参数绑定

    我正在尝试让类装饰器工作 装饰器会添加一个 init subclass 方法到它所应用的类 但是 当该方法动态添加到类中时 第一个参数不会绑定到子类对象 为什么会发生这种情况 举个例子 这是可行的 下面的静态代码是我试图最终得到的示例 cl
  • `list()` 被认为是一个函数吗?

    list显然是内置类型 https docs python org 3 library stdtypes html list在Python中 我看到底下有一条评论this https stackoverflow com a 53645813
  • 如何使用 Django 项目设置 SQLite?

    我已阅读 Django 文档 仅供参考 https docs djangoproject com en 1 3 intro tutorial01 https docs djangoproject com en 1 3 intro tutor
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • 如何使用 sys.path.append 在 Python 中导入文件?

    我的桌面上有两个目录 DIR1 and DIR2其中包含以下文件 DIR1 file1 py DIR2 file2 py myfile txt 这些文件包含以下内容 file1 py import sys sys path append s
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 是否可以将 pd.Series 分配给无序 pd.DataFrame 中的列而不映射到索引(即不重新排序值)?

    在 Pandas 中创建或分配新列时 我发现了一些意外的行为 当我对 pd DataFrame 进行过滤或排序 从而混合索引 然后从 pd Series 创建新列时 Pandas 会重新排序该系列以映射到 DataFrame 索引 例如 d
  • 如何循环遍历字典列表并打印特定键的值?

    我是 Python 新手 有一个问题 我知道这是一个非常简单的问题 运行Python 3 4 我有一个需要迭代并提取特定信息的列表 以下是列表 称为部分 的示例 已截断 数千个项目 state DEAD id phwl type name
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X

随机推荐

  • 如何在具有多个电源的单个模块项目中设置 sbt-native-packager

    我有一个单模块客户端 服务器项目 每个项目都有一个主模块 我正在尝试使用sbt native packager为两者生成启动脚本 项目 P scala object Tactic extends Build lazy val root pr
  • Pointfield 与 geodjango、javascript 和 google 地图

    我正在尝试显示并绘制数据库中存储的纬度和经度点的线 这是我的代码 为了简洁起见 我删除了一些不必要的变量 这是我的模型 class GpsLog models Model device models ForeignKey Device re
  • R 中的滚动计算

    我正在尝试使用数据表在 R 中建立摊销贷款帐户模型 每行代表一个月 每个月都会有一笔还款或预支资金 并根据上个月的余额收取利息 例如 gt loan lt data table loan age seq 0 9 payment c 5000
  • 输出包含所有转义字符的 C++ 字符串

    我有一个像这样的字符串 string s t Hello n 当我打印它时 它会给我一个选项卡 然后是 Hello 然后是一个新行 但是 我是否可以打印它 以便在控制台中看到 t Hello n 换句话说 我希望字符串忽略转义字符并将其视为
  • 使用 Scala 模式匹配时工作正则表达式失败

    在以下代码中 使用 Java API 时会匹配相同的模式 但使用 Scala 模式匹配时不会匹配 import java util regex Pattern object Main extends App val text oAuth h
  • 如何使用批处理文件重命名文件以包含日期?

    我有一个显示警报打印机的文本文件 我想在Windows XP下设置一个批处理文件 以更改警报打印机的默认名称以包含日期 这将使搜索错误变得更加容易 警报打印机被捕获到文本文件中 我已经能够更改名称 但每次我尝试将名称设置为日期时 要么什么也
  • TestNG:在运行时更改线程数

    假设我有一个可以并行或串行执行的套件 然而 这样做的决定要等到运行时才能决定 启动该套件的常见方法如下 TestNG runner new TestNG if runInParallel set parallel mode too here
  • Flash 横幅在 Chrome 中不起作用

    我的网站中有一些 Flash 横幅和一些 GIF 几天前 我注意到使用 Chrome 浏览时 Flash 不工作 用IE浏览时一切正常 这是我的网站的链接 http batgalim org il http batgalim org il
  • 为什么 Numpy 只有维度 (n,) 而不是 (n,1) [重复]

    这个问题在这里已经有答案了 我对此感到好奇有一段时间了 我可以忍受这一点 但如果不采取足够的照顾 它总是会咬我 所以我决定将其发布在这里 假设以下示例 Numpy 版本 1 8 2 a array 0 1 2 3 print shape a
  • 在输入文本字段之前禁用按钮?

    我在一个视图中有几个 uitextfields 我想禁用 uibutton 直到所有字段都输入了一些内容 这样做的最佳方法是什么 理想情况下 我也想做一些基本验证 确保所有条目都是数字 EDIT 无法让以下解决方案完全发挥作用 下面是我工作
  • 如何在 Symfony2 表单中为集合添加自动完成字段并使用 Propel?

    我将 Symfony 2 1 表单与 PropelBundle 一起使用 并且尝试重构一个具有对象下拉列表 可供选择 的表单 以代替使用 jquery 自动完成字段 使用 AJAX 对于下拉列表 我在表单类型中使用了以下代码 对于下拉列表来
  • iOS 8.3 Mobile Safari 禁用表情符号渲染

    苹果最近发布了iOS 8 3 他们添加了更多表情符号 现在所有表情符号都在移动 safari 中呈现 例如 将呈现为表情符号图标 有没有办法禁用表情符号渲染 例如通过 CSS 或 JavaScript 是的 您可以使用适当的变体字形逐个字符
  • 如何使用邮递员休息客户端将post请求发送到以下post方法

    我只是想知道如何将 JSON 对象发送到createTrackInJSON Track track 方法 用 Post通过邮递员休息客户端进行注释 这里 如何将 JSON 对象传递给 createTrackInJSON Track trac
  • UWP/Windows 10 移动版中的 System.Threading.Thread 替换

    在UWP中 如何访问线程对象 我想更改我将管理的主线程和附加线程的名称 我还想检查当前线程是否是主线程 我的目标是 Windows 10 Mobile 以下代码示例适用于桌面 但不适用于手机 获取 System DllNotFoundExc
  • state_activated预蜂窝

    你如何使用
  • 每个请求的 DbContext

    我需要为导入文件实现多线程后台作业 我已经通过后台作业 Hangfire 实现了它 但如果我使用一个线程 它会变得非常慢 该函数看起来像这样 我使用非事务单元立即保存对数据库的更改 var contactFound await contac
  • 如何在编译时检查表达式是否非法?

    我的应用程序遇到问题 我想断言函数应用程序将被编译器拒绝 有没有办法通过 SFINAE 检查这一点 例如 假设我想验证std transform to a const范围非法 这是我到目前为止所拥有的 include
  • PowerBuilder 12.5 Web 表单 - 部署时列不可编辑或丢失 Tab 键顺序

    我是一名经验丰富的 PB 开发人员 但主要使用典型的客户端 服务器架构 并且我确实遇到了问题网页表格应用程序部署到IIS7 5 using PB12 5经典 我正在创建一个可更新的数据对象 Web 服务 它在设计模式下完美工作 但是当从部署
  • 如何使用 hibernate.cfg.xml 创建数据库架构

    using lt property name hbm2ddl auto gt create lt property gt 只创建表 每当模式不存在时 hibernate 就无法创建表 因为模式不存在 Hibernate 不会为您创建模式 但
  • 使用 python 迭代时修改列表

    编辑 当我想修改原始列表时 我知道要迭代列表的副本 然而 我收到的关于在迭代列表时修改列表的错误的唯一解释是 它可能会导致意外的结果 考虑以下 lst a b c d e for x in lst lst remove x print ls