【问题标题】:compare list elment to a string将列表元素与字符串进行比较
【发布时间】:2021-10-17 22:20:33
【问题描述】:

我有以下列表

l=['web','python']

以及后面的字符串

st='python, C, something, find' 

我想检查列表中是否有任何元素在字符串中

我尝试过使用

any(x in l for x in st) 

但它给出了错误

似乎python无法识别字符串中的元素,如果有匹配项,有没有办法检查从列表到字符串的元素。我使用for循环成功地将字符串拆分为列表,但是对于真实数据来说效率不高,因为它包含很长的列表和字符串。需要一些有效的东西。 谢谢

【问题讨论】:

  • 尝试将字符串分解为字符串/单词列表。示例:words = st.split(", ")

标签: python string list list-comprehension


【解决方案1】:

您首先需要拆分字符串,否则您将遍历单个字符。

试试这个:

l=['web','python']
st='python, C, something, find'

any([x in l for x in st.split(',')]) # True

但这并不是最有效的。为了获得更好的性能,您可以考虑使用trie

【讨论】:

  • 好吧,正如我所提到的,我已经尝试过了,拆分字符串对我来说不是一个很好的解决方案。是否可以在不将字符串拆分为列表的情况下检查字符串是否与列表元素匹配。
  • 你实际上不需要这个列表。做any(x in l for x in st.split(','))
  • @yosefali 为什么你认为拆分不是一个好的解决方案?用单个字符分割字符串非常有效。
  • 这就是事情,我真正使用的是从 html 中提取的字符串,当我拆分该字符串时,一些条目有额外的空格,一些具有用于格式化此类新行“/n”或“的特殊字符/r/n”。我正在寻找的是比较元素让我们说 web 从列表到字符串,如果在字符串中以这个顺序找到了 web 然后做一些条件。
【解决方案2】:

如果您想检查列表中的任何元素是否在字符串中 那么你的代码应该是

any(x in st for x in l)

【讨论】:

  • 反向逻辑工作得很好。不错的工作。 ?
【解决方案3】:

你可以用这个方法

word_list = ['web','python']
string = 'python, C, something, find'   

exist = filter(lambda x : x in string , word_list)
print(list(exist))

输出:

['python']

【讨论】:

    【解决方案4】:

    你很亲密。怎么样:

    any(x in l for x in st.replace(',', '').split())
    

    返回:

    True
    

    另一种方法:

    import re
    re.search(r'\b(' + '|'.join(l) + r')\b', st)
    

    如果没有匹配项,搜索将返回None,如果有匹配项,则返回匹配项。你可以像这样使用它:

    if re.search(r'\b(' + '|'.join(l) + r')\b', st):
        print(f'there was a match: {t.groups()}')
    else:
        print('no match')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多