所以我正在尝试编写一个reddit机器人来查找标题中包含某些单词的文章。这是我到目前为止所做的:
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 :(得分:3)
你错误地放置了操作数的顺序而你做得不对。
使用any
检查列表中是否包含列表中的任何字样:
if any(wd in title.lower() for wd in ['word1', 'word2', 'word3']):
print(title)
要检查title
中是否包含所有字样,请改用all
。
答案 1 :(得分: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