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
我不确定为什么语法错误,并且任何帮助都很好。
答案 0 :(得分:2)
当然,这是使用列表推导的Fizzbuzz。阅读太糟糕了,任何阅读它的人都会讨厌你。对于复杂的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)]
答案 1 :(得分:0)
在我看来,最好的答案是@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
。
希望这会有所帮助!