elementtree 列表的长度在第二次调用后变为 0
lenght of a list of elementtree turn 0 after second call
我有这样的代码
import xml.etree.ElementTree as etree
tree = etree.fromstring("<all_products><product instrument_name='nice_instrument'></product></all_products>")
product_iter = tree.iterfind("product[@instrument_name='nice_instrument']")
len(list(product_iter))
这给了我预期的 product_iter 1 列表的 len。
但是如果再次调用 len(list(product_iter)) 我得到 0。
我不明白为什么会这样。有人可以解释为什么 product_iter 变量在将 len 调用到列表时会以某种方式改变吗?
查看 elementtree 的文档https://docs.python.org/2/library/xml.etree.elementtree.html我没有看到任何信息如何解释这个。
问候
Trygve
product_iter
是迭代器,不是列表。如果将其转换为列表,len
将保持 1
:
>>> import xml.etree.ElementTree as etree
>>> tree = etree.fromstring("<all_products><product instrument_name='nice_instrument'></product></all_products>")
>>> product_iter = tree.iterfind("product[@instrument_name='nice_instrument']")
>>> products = list(product_iter)
>>> len(products)
1
>>> len(products)
1
我认为这里的底线是理解 python 中的迭代器。
在这种情况下,也许 findall 而不是 iterfind 更好。
我有这样的代码
import xml.etree.ElementTree as etree
tree = etree.fromstring("<all_products><product instrument_name='nice_instrument'></product></all_products>")
product_iter = tree.iterfind("product[@instrument_name='nice_instrument']")
len(list(product_iter))
这给了我预期的 product_iter 1 列表的 len。
但是如果再次调用 len(list(product_iter)) 我得到 0。
我不明白为什么会这样。有人可以解释为什么 product_iter 变量在将 len 调用到列表时会以某种方式改变吗?
查看 elementtree 的文档https://docs.python.org/2/library/xml.etree.elementtree.html我没有看到任何信息如何解释这个。
问候 Trygve
product_iter
是迭代器,不是列表。如果将其转换为列表,len
将保持 1
:
>>> import xml.etree.ElementTree as etree
>>> tree = etree.fromstring("<all_products><product instrument_name='nice_instrument'></product></all_products>")
>>> product_iter = tree.iterfind("product[@instrument_name='nice_instrument']")
>>> products = list(product_iter)
>>> len(products)
1
>>> len(products)
1
我认为这里的底线是理解 python 中的迭代器。
在这种情况下,也许 findall 而不是 iterfind 更好。