xml - 列表中子列表的长度 - TypeError:未确定对象的len()

时间:2017-02-22 18:06:41

标签: python xml count compression typeerror

我使用 IronPython 2.7 ElementTree

代码说明: 我得到AX以下的所有计数节点。我将每个节点追加到lyst中。之后我需要lyst中每个子列表的长度。

这只是一个例子xml。我真正的xml更大更复杂。

XML:

<?xml version="1.0" encoding="UTF-8"?>
<main>

    <ex>
         <top>
                <AX>
                    <count>a</count>
                    <count>b</count>
                    <count>c</count>
                </AX>
                <AX>
                    <count>a</count>
                </AX>
                <AX>
                    <count>a</count>
                    <count>b</count>
                    <count>c</count>
                    <count>d</count>
                </AX>
        </top>
    </ex>
</main>

import clr
import sys
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
sys.path.append("C:\Program Files (x86)\IronPython 2.7\Lib")
import xml.etree.ElementTree as ET

uniStr = unicode(open(path, 'r').read())
fixed = uniStr.encode('ascii', 'replace')
fixed.decode('utf-8', 'replace')
tree = ET.ElementTree(ET.fromstring(fixed))
root = tree.getroot()

lyst=[]
count=[]
xpath=".//top//AX"
xpath2=".//count"

count_match = root.findall(xpath)

for elem in count_match:
    subelem=elem.iterfind(xpath2)
    lyst.append(subelem)

count.append(map(len,lyst))
#count.append([len(x) for x in lyst])

print count

我希望:count[3,1,4],但得到此错误:python TypeError: len() of unsized object

修改 使用列表理解:count.append([lyst中的x的len(x)))

相同错误:TypeError: len() of unsized object

如何计算子列表中的对象?

1 个答案:

答案 0 :(得分:1)

错误很简单,lyst中的元素是生成器,所以你不能问它们的长度。您必须先将它们转换为列表count = [len(list(x)) for x in lyst]

现在输出

[3, 1, 4]

正如所料。

如果您使用PyCharm,那么您可以通过调试代码轻松找到它。这是崩溃的地方:

enter image description here

我还建议你使用列表理解

lyst = [elem.iterfind(xpath2) for elem in count_match]