У меня есть код, как этотклыков из списка ElementTree поворота 0 после второго вызова
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))
И это дает мне Len списка product_iter 1, как и ожидалось.
Но если вызов Len (список (product_iter)) снова я получаю 0.
Я не понимаю, почему это происходит. Может ли кто-нибудь объяснить, почему переменная product_iter каким-то образом изменилась, чем вызов len в список?
Посмотрите на документацию по elementtree https://docs.python.org/2/library/xml.etree.elementtree.html Я не вижу никакой информации, как это объяснить.
С уважением Trygve
ах, хорошо. Я понимаю. Но список команд (product_iter) преобразует итератор в список. Можно ли это сделать без изменения итератора? –
Как только итератор потребляется, его невозможно сбросить. Вы можете снова спросить дерево с помощью tree.iterfind ('.... 'или вместо этого использовать' tree.findall() '. – Jieter
list() будет использовать ваш итератор, сохраните список, если вы хотите его использовать больше чем один раз. – Paul