这里有点蟒蛇/编程新手。
我试图从元组列表中访问指定范围的元组,但我只想访问元组范围中的第一个元素。指定的范围基于我在由nltk标记和标记的文本字符串中寻找的模式。我的代码:
from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
text = "It is pretty good as far as driveway size is concerned, otherwise I would skip it"
tokenized = word_tokenize(text)
tagged = pos_tag(tokenized)
def find_phrase():
counter = -1
for tag in tagged:
counter += 1
if tag[0] == "as" and tagged[counter+6][0] == "concerned":
print tagged[counter:counter+7]
find_phrase()
印刷输出:
[('as', 'IN'), ('far', 'RB'), ('as', 'IN'), ('driveway', 'NN'), ('size', 'NN'), ('is', 'VBZ'), ('concerned', 'VBN')]
我真正想要的是什么:
['as', 'far', 'as', 'driveway', 'size', 'is', 'concerned']
是否可以修改我的代码行print tagged[counter:counter+7]
以获得所需的打印输出?
答案 0 :(得分:3)
可能最简单的方法使用list comprehension。此语句根据列表中每个元组的第一个元素创建一个列表:
print [tup[0] for tup in tagged[counter:counter+7]]
或者只是为了好玩,如果元组总是成对的,你可以使列表变平(使用你喜欢的任何方法),然后使用python {{3}的步符号打印每一个元素。表示法:
print list(sum(tagged[counter:counter+7], ()))[::2]
或者使用map
和slice函数,后者调用__getitem__()
方法来检索列表中每个元组的第0个索引:
from operator import itemgetter
print map(itemgetter(0), tagged[counter:counter+7])
还有别的吗?我相信还有更多。
答案 1 :(得分:2)
您可以这样使用:
result, _ = zip(*find_phrase())
print result
答案 2 :(得分:0)
你试过拉链吗? 也 名称
中项目的项目[0]