首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python - NLP -将iter(iter(树))转换为列表(树)

Python - NLP -将iter(iter(树))转换为列表(树)
EN

Stack Overflow用户
提问于 2015-10-06 14:54:00
回答 2查看 551关注 0票数 5

我有一个解析器函数,它返回iter(iter(tree))

代码语言:javascript
复制
parsedSentence = parser.raw_parse_sents([sentence],False)  

如何将parsedSentence类型转换为list (树)并访问该列表的第一个元素。

我已经尝试过list(parser.raw_parse_sents([sentence],False)),但它没有将结果转换为list。

编辑:

代码语言:javascript
复制
s1 = parsedSentence[0]
t1 = Tree.convert(s1)
positions = t1.treepositions()

在这里,它抛出一个错误:

代码语言:javascript
复制
'listiterator' object has no attribute 'treepositions'

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-06 15:08:58

对于在可迭代对象上使用iter的时间,您可以通过调用list函数将其转换为list,这并没有任何区别。

代码语言:javascript
复制
>>> l =[6, 3, 5, 1, 4, 2]
>>> list(iter(iter(iter(iter(l)))))
[6, 3, 5, 1, 4, 2]

但是,如果您只想获得第一个项,您就不需要使用list函数,只需在迭代器上使用next方法或next()内建函数(在python3.x中,只需使用内置函数next())即可获得第一项:

代码语言:javascript
复制
>>> iter(iter(l)).next()
6
>>> iter(iter(iter(l))).next()
6
>>> iter(iter(iter(iter(l)))).next()
6

现在,关于您的问题,如果在调用list之后没有得到一个list,那么它肯定不是一个迭代器,而是另一种对象类型,您需要根据它的__getitem__方法的实现方式来获取它的项。

基于您的编辑,t1是一个列表迭代器对象,没有属性treepositions,您可以遍历它的项,然后调用这些treepositions属性:

代码语言:javascript
复制
s1 = parsedSentence[0]
t1 = Tree.convert(s1)
positions = [item.treepositions() for item in t1]
票数 2
EN

Stack Overflow用户

发布于 2015-10-06 16:14:00

最后,通过改变

代码语言:javascript
复制
parser.raw_parse_sents([sentence],False)  

代码语言:javascript
复制
parser.raw_parse(sentence)  

感谢每一个贡献自己时间的人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32973119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档