New submission from WoodyWoo <saulmatchl...@163.com>:

We can remove elements using Element.remove(). Let’s say we want to remove all 
countries with a rank higher than 50:

>>>
>>> for country in root.findall('country'):
...     rank = int(country.find('rank').text)
...     if rank > 50:
...         root.remove(country)
...
>>> tree.write('output.xml')

When the original xml has over 2 country with  rank>50,and they are one by one 
neighborly siblings element,the upper code will delete the 1st 3rd 5th and more 
odd No. country.
A proper example should be:
index=0
while index < len(root.findall("./*")):
    rank = int (root[index].find("rank").text)
    if rank>50:
        root.remove(root[index])
        index=index+0
        continue
    index=index+1


I think "for each in list" should not work by index,but should work by pointer 
like thing,could be a list of pointers.
A finial solution should be like this --- when the "for each in list" was 
acting,the pointers list would be fixed,and you need not to worry about the 
"list" changing.

----------
assignee: docs@python
components: Documentation
messages: 377726
nosy: WoodyWoo, docs@python
priority: normal
severity: normal
status: open
title: Poor example for Element.remove()
type: behavior
versions: Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue41899>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to