2015-10-15 63 views
1

嗯,我不知道如何解釋這一點。例如,我有以下代碼:從列表中提取關鍵字,然後使用`和`

if 'foo' and 'bar' in 'foobar': 
    print('foobar') 

我想用一些關鍵詞來檢查的刺痛,我的問題是,現在我試圖把這些關鍵字在這樣的名單:

keywords = ['foo', 'bar'] 

但我現在怎麼使用它們?如果我使用for提取它們像這樣:

for i in keywords: 
    if i in 'foobar': 
     print('foobar') 

但是,這將打印foobar兩次。

+6

請注意'foobar'' =='('foo')和''''''''中的''foo'和'bar'。 –

+0

@ PM2Ring有趣:)在'foobar'中,'foo'和'bar'以及'baz'怎麼樣?它是否等於'('foo')和('bar')和(''foobar'中的'baz')' –

+2

@KevinGuan是的。 – ArtOfWarfare

回答

9

您可以使用生成器表達式遍歷所有關鍵字並檢查它們是否全部包含在'foobar'中。使用all也將使其在發現第一個False後短路。

if all(i in 'foobar' for i in keywords): 
    print('foobar') 

模擬的情況是,如果你想print如果任何關鍵字發現,您可以使用

if any(i in 'foobar' for i in keywords): 
    print('foobar') 
+2

謝謝,這是非常好的:) –

+0

我不知道你是不是這樣做倒退。 IE,如果關鍵字只是'['foo']',它會打印出foobar。但是,我不能完全從你的問題中得知 - 你想確保每個關鍵字都在「foobar」中,或者「foobar」的每個部分都在關鍵字中? – ArtOfWarfare

+0

我不確定'analog'是否是正確的術語。它也不是「相反」的。 [另一天](http://stackoverflow.com/questions/33048555/python-equivalent-of-scalas-exists-function/33048617#33048617)我用'補充'。 –

3

如果你想用一個循環堅持,你可以使用一個for-else

for i in keywords: 
    if i not in 'foobar': 
     break 
else: 
    print('foobar') 

如果任何i不在'foobar',退出循環,並跳過了else部分。 else如果for-else僅在循環退出而沒有break ing時輸入,在這種情況下僅在每個i'foobar'時纔會發生。