【问题标题】:How to find a substring in a string list?如何在字符串列表中查找子字符串?
【发布时间】:2021-04-21 23:17:59
【问题描述】:

我尝试在列表中查找一些字符串,但由于词序问题。

list = ['a b c d', 'e f g', 'h i j k']
str = 'e g'

我需要在列表中找到第二个项目并将其输出。

【问题讨论】:

标签: python python-3.x string list search


【解决方案1】:

您可以使用any()all()的组合在一行中检查是否存在

>>> my_list = ['a b c d', 'e f g', 'h i j k']
>>> my_str = 'e g'

>>> any(all(s in sub_list for s in my_str.split()) for sub_list in my_list)
True

这里,上面的表达式将返回True / False,具体取决于您的字符串中的字符是否存在于列表中。

为了也获取子列表作为返回值,您可以通过跳过any() 来修改上面的表达式,列表理解为:

>>> [sub_list for sub_list in my_list if all(s in sub_list for s in my_str.split())]
['e f g'] 

它将返回包含您的字符的字符串列表。

【讨论】:

  • 非常感谢!这是否适用于单词而不是字符(在字符串中)?
  • 它会起作用,但在一定程度上,它不会进行精确的单词匹配。例如:在"test string" 中检查"est" 将返回True。如果您正在寻找单词的完全匹配,那么它会更适合作为一个单独的问题。单词查找的逻辑与我们这里的字符查找略有不同
【解决方案2】:

这可以通过使用集合和列表理解来实现

ls = ['a b c d', 'e f g', 'h i j k']
s = 'e g'
print([i for i in ls if len(set(s.replace(" ", "")).intersection(set(i.replace(" ", "")))) == len(s.replace(" ", ""))])

ls = ['a b c d', 'e f g', 'h i j k']
s = 'e g'
s_set = set(s.replace(" ", ""))
print([i for i in ls if len(s_set.intersection(set(i.replace(" ", "")))) == len(s_set)])

输出

['e f g']

列表理解正在删除 ls 中所有来​​自 s 的字符不包括在列表项中的所有项目,这样您将获得所有 ls 的所有项目 s 字符是在他们里面。

【讨论】:

    【解决方案3】:

    你可以试试这个

    list = ['a b c d', 'e f g', 'h i j k']
    str = list[2].split()
    for letter in str:
      print(letter)
    

    【讨论】:

      【解决方案4】:

      你可以试试:

      for l in list:
           l_words = l.split(" ")
           if all([x in l_words for x in str.split(" ")]):
               print(l_words)
      

      【讨论】:

        猜你喜欢
        • 2012-05-16
        • 2023-04-03
        • 2018-09-27
        • 1970-01-01
        • 1970-01-01
        • 2021-01-18
        • 2019-06-22
        • 1970-01-01
        相关资源
        最近更新 更多