代码之家  ›  专栏  ›  技术社区  ›  e1v1s

按reddit bot的单词列表过滤for循环中的字符串

  •  0
  • e1v1s  · 技术社区  · 7 年前

    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

    2 回复  |  直到 7 年前
        1
  •  3
  •   Moses Koledoye    7 年前

    操作数的顺序被错误地放置,并且没有正确地执行。

    使用 any 检查是否 任何 列表中的单词包含在标题中:

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

    全部的 的文字包含在 title 使用 all

        2
  •  2
  •   poke    7 年前
    title.lower() in ['word1',  'word2', 'word3']
    

    这完全验证了它所说的:是否 title.lower() ,小写 title

    这在以下情况下有效:

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

    但当然,当 标题 title = 'Word1 foo bar' 将永远不会成为该单字列表的元素。

    因此,您必须检查单词列表中的每个单词是否包含在 标题 字符串:

    >>> 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