繁体   English   中英

访问元组列表中元组第一个元素的范围

[英]Accessing a range of the first element of a tuple in a list of tuples

有点Python /编程新手。

我正在尝试从元组列表中访问指定范围的元组,但是我只想访问元组范围中的第一个元素。 指定的范围基于我正在由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]以获取所需的打印输出?

可能最简单的方法是使用列表理解 该语句从列表中每个元组的第一个元素创建一个列表:

print [tup[0] for tup in tagged[counter:counter+7]]

或者只是为了好玩,如果元组总是成对的,则可以将列表展平(使用您喜欢的任何方法),然后使用python的切片符号的步骤符号打印第二个元素:

print list(sum(tagged[counter:counter+7], ()))[::2]

或将mapitemgetter函数一起使用,该函数调用__getitem__()方法来检索列表中每个元组的第0个索引:

from operator import itemgetter
print map(itemgetter(0), tagged[counter:counter+7])

还要别的吗? 我敢肯定还有更多。

您可以这样使用:

result, _ = zip(*find_phrase())
print result

您尝试过拉链吗? 还有名称中的item [0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM