【问题标题】:Check if the characters in a string are contained in any of the word of a list检查字符串中的字符是否包含在列表的任何单词中
【发布时间】:2019-10-02 12:38:46
【问题描述】:

我需要找到一种方法来检查给定字符是否包含在很长列表的任何单词中。

我想你可以通过检查列表中单词的每个索引来做到这一点,有点像这样:

for i in list:
    if i[0] == 'a' or 'b':
       found_words.append(i)
    if i[1] == 'a' or 'b':
       found_words.append(i)

但这不是一种非常时尚且不是非常有效的方式。

感谢您的帮助

【问题讨论】:

  • 你能举个例子说明你想要达到的目标吗?
  • 获得帮助的最佳方式是显示您的输入、代码、当前输出和预期输出
  • if i[0] == 'a' or 'b' 可能不是您想要的。它转换为i[0] == 'a''b',其中第二部分始终为真。更好i[0] in ('a', 'b')
  • 请包括输入示例和预期输出,这将阐明您的需求。
  • 你可以使用sets: if set(i[:2]) <= set('ab')

标签: python string list indexing substring


【解决方案1】:

一种更容易理解的方法如下:

character='e'

for i in list:
    if character in i:
       found_words.append(i)

【讨论】:

    【解决方案2】:

    如果要匹配列表中的字符,可以使用正则表达式。

    import re
    
    for i in lst:
        re.match(str,i) #returns "true", use in conditionals
    

    将“str”替换为您要检查的字符,例如“[abcde]”,它匹配任何单词中的“a”、“b”、“c”、“d”或“e”,或者"[abcde][pqrst]" 匹配 "ap"、"at"、"eq" 等的任意组合。使用变量这样做,这样您就可以更轻松地更改它。

    【讨论】:

      【解决方案3】:

      您可以执行以下操作:

      check = set('ab').intersection  # the letters to check against
      lst = [...]  # the words, do not shadow the built-in 'list'
      
      found_words = [w for w in lst if check(w)]
      

      或更短:

      found_words = list(filter(check, lst))
      

      【讨论】:

      • 可能从w超过2个字符的问题来看。
      • @PeterWood 这对我的回答有何影响?
      • 字母ab 可能不在第一个和第二个索引处。
      • @PeterWood 您能否提供一组输入,这些输入会因此代码而失败?
      • @PeterWood 哦,我明白了。您要从 OP 中的代码解释他们只想查看前两个字符是否匹配?我想他们必须澄清一下,因为在我看来,描述听起来就像他们只是想看看这些字母是否在任何地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      相关资源
      最近更新 更多