xml.etree.ElementTree.Element.remove的项中x与列表(项)之间的差异

克里斯派索

下面我有一个简单的XML结构

<T1>
    <T2>
        <override select="A,B,C">
            <B>Hello</B>
        </override>
        <override select="A">
            <A>Hello</A>
        </override>
    </T2>
</T1>

在此示例中,我尝试删除任何标记为override
假设我有以下用于设置的代码:

import xml.etree.ElmenentTree as ET
tree = ET.parse(file)
root = tree.getroot()

如果我这样做,则以下一项内容仍然存在:

for parent in root.iter():
    for child in parent:
        if child.tag == 'override':
            parent.remove(child)

但是,如果我指定list(parent)而不是just in parent,那么它可以工作:

for parent in root.iter():
    for child in list(parent):
        if child.tag == 'override':
            parent.remove(child)

为什么会这样?如果child在删除之前先打印出来,则可以清楚地看到以两种方式打印相同的元素。那么,这里到底发生了什么?

安东·萨文(Anton Savin)

在迭代集合时,一定不要修改它。Python 2.7文档没有明确解释,但这是Python 3文档说的

注意循环修改序列时有一个微妙之处(这仅适用于可变序列,即列表)。内部计数器用于跟踪下一个要使用的项目,并且每次迭代时都会递增。当该计数器达到序列的长度时,循环终止。这意味着,如果套件从序列中删除当前(或上一个)项目,则下一个项目将被跳过(因为它获取已被处理的当前项目的索引)。同样,如果套件在当前项目之前按顺序插入一个项目,则下次通过循环再次处理当前项目。这可能导致讨厌的错误,可以通过使用整个序列的一部分进行临时复制来避免这些错误

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python(xml.etree.ElementTree)中的XML解析

来自分类Dev

xml.etree.ElementTree getElementByID()?

来自分类Dev

xml.etree.ElementTree findall

来自分类Dev

xml.etree.ElementTree findall

来自分类Dev

如何使用xml.etree.ElementTree访问标签之间的文本

来自分类Dev

如何使用xml.etree.ElementTree访问标签之间的文本

来自分类Dev

Python xml.etree.ElementTree问题,Element.tag不仅给我带来了标签名,

来自分类Dev

xml.etree.ElementTree-麻烦设置xmlns ='...'

来自分类Dev

Python xml.etree.ElementTree 问题

来自分类Dev

使用xml.etree.ElementTree获取文件中的XML标签列表

来自分类Dev

使用xml.etree.ElementTree解析XML时获取空列表作为属性

来自分类Dev

从Python中的XML数据创建字典(使用xml.etree.ElementTree)

来自分类Dev

如何在python xml.etree.ElementTree中的迭代器中删除节点

来自分类Dev

在Python中,如何使用xml.etree.ElementTree创建数据框?

来自分类Dev

如何使用 python 从soap响应中的多个命名空间获取数据:xml.etree.ElementTree

来自分类Dev

使用xml.etree.ElementTree XML解析子元素

来自分类Dev

使用xml.etree.ElementTree搜索XML元素树的属性

来自分类Dev

使用 Python xml.etree.ElementTree 遍历 XML 树的问题

来自分类Dev

可以继承或模拟python etree.ElementTree.Element吗?

来自分类Dev

继承或模拟python etree.ElementTree.Element可能吗?

来自分类Dev

xml.etree.ElementTree iterparse()仍在使用大量内存?

来自分类Dev

python xml.etree.ElementTree追加到子元素

来自分类Dev

使用html5lib和xml.etree.ElementTree

来自分类Dev

IronPython和xml.etree.ElementTree非法字符错误

来自分类Dev

无法使用xml.etree.ElementTree解析html

来自分类Dev

使用Python模块xml.etree.ElementTree解析有点复杂的XML并将值存储在List中

来自分类Dev

在ElementTree中检查XML Element是否有子级

来自分类Dev

如何使用xml.etree.ElementTree有条件地将属性插入Python中的节点

来自分类Dev

将lxml.etree._ElementTree对象存储在数据帧中:TypeError:无法腌制lxml.etree._ElementTree对象

Related 相关文章

  1. 1

    python(xml.etree.ElementTree)中的XML解析

  2. 2

    xml.etree.ElementTree getElementByID()?

  3. 3

    xml.etree.ElementTree findall

  4. 4

    xml.etree.ElementTree findall

  5. 5

    如何使用xml.etree.ElementTree访问标签之间的文本

  6. 6

    如何使用xml.etree.ElementTree访问标签之间的文本

  7. 7

    Python xml.etree.ElementTree问题,Element.tag不仅给我带来了标签名,

  8. 8

    xml.etree.ElementTree-麻烦设置xmlns ='...'

  9. 9

    Python xml.etree.ElementTree 问题

  10. 10

    使用xml.etree.ElementTree获取文件中的XML标签列表

  11. 11

    使用xml.etree.ElementTree解析XML时获取空列表作为属性

  12. 12

    从Python中的XML数据创建字典(使用xml.etree.ElementTree)

  13. 13

    如何在python xml.etree.ElementTree中的迭代器中删除节点

  14. 14

    在Python中,如何使用xml.etree.ElementTree创建数据框?

  15. 15

    如何使用 python 从soap响应中的多个命名空间获取数据:xml.etree.ElementTree

  16. 16

    使用xml.etree.ElementTree XML解析子元素

  17. 17

    使用xml.etree.ElementTree搜索XML元素树的属性

  18. 18

    使用 Python xml.etree.ElementTree 遍历 XML 树的问题

  19. 19

    可以继承或模拟python etree.ElementTree.Element吗?

  20. 20

    继承或模拟python etree.ElementTree.Element可能吗?

  21. 21

    xml.etree.ElementTree iterparse()仍在使用大量内存?

  22. 22

    python xml.etree.ElementTree追加到子元素

  23. 23

    使用html5lib和xml.etree.ElementTree

  24. 24

    IronPython和xml.etree.ElementTree非法字符错误

  25. 25

    无法使用xml.etree.ElementTree解析html

  26. 26

    使用Python模块xml.etree.ElementTree解析有点复杂的XML并将值存储在List中

  27. 27

    在ElementTree中检查XML Element是否有子级

  28. 28

    如何使用xml.etree.ElementTree有条件地将属性插入Python中的节点

  29. 29

    将lxml.etree._ElementTree对象存储在数据帧中:TypeError:无法腌制lxml.etree._ElementTree对象

热门标签

归档