列表理解是否允许多个elif语句?

2024-09-28 01:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

noun_gathering_system = [(lemmatizer.lemmatize(word), 1) if tag.pos_tag([word])[0][1] in ["NN", "NNS", "NNP", "NNPS", "FW"] else (lemmatizer.lemmatize(word), 2) if tag.pos_tag([word])[0][1] in ["PRP"] else (lemmatizer.lemmatize(word), 3) if tag.pos_tag([word])[0][1] in ["JJ"] else continue for word in word_tokenize(sentence.lower())]

使用nltk,我试图从一个句子中只收集某些名词和单词。我想按名词-1,代词-2,形容词-3排列我收集的单词的优先顺序。在没有列表理解的情况下编写的代码可以很好地工作,但是在列表理解的情况下,我的代码总是失败,并出现以下错误。你知道吗

  File "main.py", line 16
    validitychecker = [(lemmatizer.lemmatize(word), 1) if tag.pos_tag([word])[0][1] in ["NN", "NNS", "NNP", "NNPS", "FW"] else (lemmatizer.lemmatize(word), 2) if tag.pos_tag([word])[0][1] in ["PRP"] else (lemmatizer.lemmatize(word), 3) if tag.pos_tag([word])[0][1] in ["JJ"] else pass for word in word_tokenize(sentence.lower())]
                                            ^
SyntaxError: invalid syntax

我不知道为什么语法是错误的,任何帮助将是巨大的。你知道吗


Tags: inposiftagnnelsewordlemmatizer
2条回答

在我看来,最好的答案应该是@dfundako,因为当涉及到复杂的if/else时,只编写一个标准循环要容易得多。但是,如果您真的想把它作为一个列表理解,那么这里唯一的错误就是pass语句,您可以用None替换它,如下所示:

validitychecker = [(lemmatizer.lemmatize(word), 1) if tag.pos_tag([word])[0][1] in ["NN", "NNS", "NNP", "NNPS", "FW"] else (lemmatizer.lemmatize(word), 2) if tag.pos_tag([word])[0][1] in ["PRP"] else (lemmatizer.lemmatize(word), 3) if tag.pos_tag([word])[0][1] in ["JJ"] else None for word in word_tokenize(sentence.lower())]

然后,只需执行list(filter(None, validitychecker))即可删除列表中的所有None。你知道吗

希望这有帮助!你知道吗

当然,这里有一个使用列表理解的嗡嗡声。阅读是可怕的,任何人阅读它都会恨你。对于复杂的if/else,编写一个标准循环。你知道吗

['Fizzbuzz' if x%3==0 and x%5==0 else 'Fizz' if x%3==0 else 'Buzz' if x%5==0 else x for x in range(1,101)]

相关问题 更多 >

    热门问题