通过reddit bot的单词列表中的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)

如果我用...

替换最后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

最新更新