2013-04-02 48 views
0

我有一个列表self.terms中的单词列表和字符串line。如果列表中的任何条款都在line中,我想将它们写入文件terms_filePython lambda with any()

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

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

如何写出文件?我试着添加一个lambda,但是我对他们不是很熟悉,而且没有用。我收到了一些语法错误,但经过一些更改后,我又返回了False

可以使用any()来做到这一点吗?

+0

你想写*所有*条款,还是只有第一个匹配? –

+0

所有符合条款。 – darksky

+2

无论谁投票决定关闭和低估,你能解释为什么这是“不是真正的问题”吗?这是关于lambda中的any()函数的完全“真实”问题。我很抱歉,如果我没有10年的Python经验,他可能听起来“太简单”或与你无关。 – darksky

回答

3

此处不要使用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

+0

或者:'terms_file.write(''。join(filter(lambda term:term in line,self.terms)))'如果你更喜欢'lambda'和'filter'给一个过滤生成器语句。 – hughdbrown

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))