1

我有一个列表中的单词列表self.terms和一个字符串line。如果列表中的任何术语在line,我想将它们写到一个文件terms_file中。

我使用any()如下所示,但这会返回一个布尔值。

any(terms_file.write(term) for term in self.terms if term in line)

我怎样才能写出文件?我尝试添加一个 lambda,但我对它们并不十分熟悉,但没有奏效。我遇到了一些语法错误,但经过一些更改后,我False再次返回。

是否可以使用 来做到这一点any()

4

2 回答 2

4

不要any()在这里使用;你甚至不使用返回值。

要编写所有匹配项,请使用:

terms_file.write(''.join(term for term in self.terms if term in line))

但最好只使用常规循环;可读性很重要!

for term in self.terms:
    if term in line:
        terms_file.write(term)

any()仅在您想了解测试的布尔结果时使用;any()当它找到第一个True值时停止迭代。在你的情况下terms_file.write()返回None,所以它甚至永远不会遇到True总是返回False

于 2013-04-02T13:21:45.447 回答
0

any将告诉您是否存在任何术语line(因此得名)。

您可以创建这些术语的列表:

present_terms = list(terms_file.write(term) for term in self.terms if term in line)

并将其写入文件,可能在加入列表项之后:

out_file.write(' '.join(present_terms))
于 2013-04-02T13:22:47.047 回答