首页 > 解决方案 > 使用while循环python查找下一个元素

问题描述

我坚持这个想法。我想打印紧跟在代词名词之后的动词,所以我正在迭代,直到循环找到一个动词。然后打印它。但它似乎不仅打印了动词,还打印了其他元素。知道我会出错吗?太感谢了

 points = [('I', 'PRON', 'nsubj'),
         ('don', 'AUX', 'aux'),
         ('t', 'PART', 'neg'),
         ('hope', 'VERB', 'ROOT'),
         ('that', 'SCONJ', 'mark'),
         ('the', 'DET', 'det'),
         ('salary', 'NOUN', 'nsubj'),
         ('will', 'AUX', 'aux'),
         ('change', 'VERB', 'ccomp'),
         ('.', 'PUNCT', 'punct')]

for i, (word, pos, dep) in enumerate(points):
    intermediate_list_sentences = []

    if pos == "PRON" or pos == "NOUN":
        iterate = 1
        while points[i+iterate][1] != "VERB":
            iterate+=1
            print(points[i+iterate][0])

期望的输出 => 希望

标签: pythonloopsnlp

解决方案


要修复您的代码,您只需要在跳过所有非动词print之后print使用该词,而不是非动词词本身,即移出循环:

while points[i+iterate][1] != "VERB":
    iterate+=1
print(points[i+iterate][0])

iter或者,您可以从单词列表中创建一个并使用两个嵌套for循环迭代相同的迭代器:

it = iter(points)
for word, pos, dep in it:
    if pos in ("PRON", "NOUN"):
        print(word)
        for word2, pos2, _ in it:
            if pos2 == "VERB":
               print(word2)
               break

或更简洁,next用于获取匹配项VERB

it = iter(points)
for word, pos, dep in it:
    if pos in ("PRON", "NOUN"):
        verb = next((word2 for word2, pos2, _ in it if pos2 == "VERB"), None)
        print(word, verb)

输出:

I hope
salary change

推荐阅读