2024-06-26 13:42:07 发布
网友
是否有所有模块都遵循的一般规则?在
In my case,我正在使用Python xml.etree library
假设我这样做:
for el in root.iter('*'): for subel in el: el.remove(subel)
这会破坏el迭代器吗?在
el
在很多情况下,在迭代iterable时修改它会导致问题。Here's当在迭代过程中删除一个元素时,XML树的迭代会被打乱的示例。在stackoverflow上有很多问题,在迭代列表时会得到令人惊讶的结果:
>>> lst = [1, 1, 2, 3] >>> for item in lst: ... if item == 1: ... lst.remove(item) ... >>> print(lst) [1, 2, 3]
(请注意,输出列表中仍有一个1)。在
1
因此,一般的规则是,当迭代器正在执行时,您可能不应该做任何添加或删除项的操作。如果您不知道迭代器是如何实现的,这是迄今为止最安全的方法。但是,有些迭代器是以特定的方式工作的。e、 g.以上面的列表为例,如果我们反向迭代列表,我们发现可以移除当前的(或索引较低的元素):
这是由于列表迭代器所做的某些保证造成的。请注意,由于我上面列出的一般规则,我不建议这样做(这可能会导致您的代码阅读者绞尽脑汁,试图找出您为什么要反向迭代它)。在
对于列表的情况,如果计划删除/添加元素,您会看到人们在列表的副本上迭代,但是如果不了解问题的约束,就很难对一般迭代器的情况给出建议。在
在很多情况下,在迭代iterable时修改它会导致问题。Here's当在迭代过程中删除一个元素时,XML树的迭代会被打乱的示例。在stackoverflow上有很多问题,在迭代列表时会得到令人惊讶的结果:
(请注意,输出列表中仍有一个
1
)。在因此,一般的规则是,当迭代器正在执行时,您可能不应该做任何添加或删除项的操作。如果您不知道迭代器是如何实现的,这是迄今为止最安全的方法。但是,有些迭代器是以特定的方式工作的。e、 g.以上面的列表为例,如果我们反向迭代列表,我们发现可以移除当前的(或索引较低的元素):
^{pr2}$这是由于列表迭代器所做的某些保证造成的。请注意,由于我上面列出的一般规则,我不建议这样做(这可能会导致您的代码阅读者绞尽脑汁,试图找出您为什么要反向迭代它)。在
对于列表的情况,如果计划删除/添加元素,您会看到人们在列表的副本上迭代,但是如果不了解问题的约束,就很难对一般迭代器的情况给出建议。在
相关问题 更多 >
编程相关推荐