它没有返回任何东西。您的功能是印刷,不返回。
您需要返回一个列表。作为一个附注,你应该从list
重命名你的函数参数。你会无意中破坏一些东西。
一种选择是稍微修改你的函数追加到一个列表,然后返回:
def noun_names(word_list):
lemma_list = []
for synset in word_list:
for lemma in synset.lemmas():
lemma_list.append(lemma.name())
return lemma_list
另一种选择是上述改变成一个列表理解:
def noun_names(word_list):
return [lemma.name() for synset in word_list for lemma in synset.lemmas()]
这两个函数都会返回一个具有相同信息的列表。请注意,由于函数返回list
,所以我删除了list()
函数包装器wn.all_synsets(wn.NOUN)
。
lemma_list1 = noun_names(wn.all_synsets(wn.NOUN))
lemma_list2 = noun_names_1(wn.all_synsets(wn.NOUN))
print len(lemma_list1), len(lemma_list2), len(lemma_list1) == len(lemma_list2), lemma_list1 == lemma_list2
即最终打印语句输出:
146347 146347 True True
这表明两个列表具有相同数量的元素(146347
每个和第一True
)和列表本身是相等的。代码中的一个更合适的测试是:
assert len(lemma_list1) == len(lemma_list2)
assert lemma_list1 == lemma_list2
如果列表是不一样的长度或等于assert
声明会抛出异常。
太谢谢你了。我以前试图做到这一点,但我忘记了最后一行“返回名称”,它完成了循环。很有帮助! – DRG
不用担心 - 您应该也可以注意Andy的警告 - 在Python中命名列表“列表”通常是一个危险的命题。 – georgeofallages