2017-09-18 72 views
0

所以我試圖寫一個reddit機器人來查找標題中某些單詞的文章。這是我到目前爲止有:在for循環中過濾字符串的單詞列表爲reddit bot

top_posts = page.hot(limit=20) 
for post in top_posts: 
    title = post.title 
    if title.lower() in ['word1', 'word2', 'word3']: 
     print(title) 

如果我更換了最後兩行用...

if 'word1' in title.lower(): 
     print(title) 

然後它會打印在他們word1的冠軍,但是當我把它改成一個清單它不會。我想用一個列表來匹配同一個單詞的不同拼寫。我在這裏做錯了什麼?

+0

'title.lower()'不在'['word1','word2','word3']' –

回答

3

你有錯誤地放置操作數的順序,並且你做得不對。

使用any檢查列表中的任何單詞包含在標題:

if any(wd in title.lower() for wd in ['word1', 'word2', 'word3']): 
    print(title) 

要檢查的話,如果所有都包含在title,使用all代替。

+0

你是我的救世主摩西。謝謝! – e1v1s

2
title.lower() in ['word1', 'word2', 'word3'] 

該檢查正是它說:無論title.lower(),小寫title,是單詞的列表。

這將情況無效title是一個詞,例如:

>>> title = 'Word1' 
>>> title.lower() in ['word1', 'word2', 'word3'] 
True 

當然但當title是包含多個單詞的句子實際這是行不通的。 title = 'Word1 foo bar'永遠不會是該單詞列表的元素。

所以,你必須有它是否包含在title字符串從您的單詞列表檢查每一個字:

>>> title = 'Word1 foo bar' 
>>> 'word1' in title.lower() 
True 
>>> 'word2' in title.lower() 
False 
>>> 'word3' in title.lower() 
False 

你可以做,在一個循環,並儘快跳出來你打一個積極的結果:

>>> def titleContainsWords(title, words): 
     for word in words: 
      if word in title: 
       return True 
     return False 

>>> wordlist = ['word1', 'word2', 'word3'] 
>>> titleContainsWords(title.lower(), wordlist) 
True 

這是這樣一個共同的東西,那也有一個較短的方式做同樣的事情,結合any()函數發生器表達式:

>>> any(word in title.lower() for word in wordlist) 
True