所以我试图编写一个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)
如果我用...
替换最后2行 if 'word1' in title.lower():
print(title)
然后,它将打印其中包含word1
的标题,但是当我将其放入列表中时,它不会。我想使用列表匹配同一单词的不同拼写。我在这里做错了什么?
您的操作数的顺序错误地放置了,并且您的操作不正确。
使用 any
检查列表中的单词是否包含在标题中:
if any(wd in title.lower() for wd in ['word1', 'word2', 'word3']):
print(title)
检查单词的所有是否包含在title
中,请使用all
代替。
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