2013-04-02 80 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))