我有一个解析器函数,它返回iter(iter(树)).
parsedSentence = parser.raw_parse_sents([sentence],False)
如何将parsedSentence类型转换为列表(树)并访问该列表的第一个元素.
我已经尝试过list(parser.raw_parse_sents([sentence],False))但是它没有将结果转换为list.
编辑:
s1 = parsedSentence[0]
t1 = Tree.convert(s1)
positions = t1.treepositions()
这里抛出一个错误:
'listiterator' object has no attribute 'treepositions'
谢谢.
最佳答案
你在可迭代对象上使用iter的次数没有任何区别,只需通过调用list函数将其转换为list即可.
>>> l =[6,3,5,1,4,2]
>>> list(iter(iter(iter(iter(l)))))
[6,2]
但是如果你只想获得第一项,你不需要使用list函数,你只需在迭代器或next()内置函数上使用next方法(在python 3.X中你可以使用内置函数) next())获取forst项:
>>> iter(iter(l)).next()
6
>>> iter(iter(iter(l))).next()
6
>>> iter(iter(iter(iter(l)))).next()
6
现在关于你的问题,如果你在调用它之后没有得到一个列表,那肯定它不是一个迭代器,它将是你需要根据其__getitem__
方法的实现方式得到它的项目的另一个对象类型.
根据您的编辑,t1是一个列表迭代器对象,并且没有属性树位置,您可以循环它的项目,然后调用那些treepositions属性:
s1 = parsedSentence[0]
t1 = Tree.convert(s1)
positions = [item.treepositions() for item in t1]