繁体   English   中英

如何检查子字符串是否与Python中的字符串列表匹配

[英]How to Check if the substring is matching in a list of strings in Python

我有一个列表,我想查找字符串列表中是否存在该字符串。

li = ['Convenience','Telecom Pharmacy']
txt = '1 convenience store'

我想将txt与列表中的Convenience匹配。

我努力了

if any(txt.lower() in s.lower() for s in li):
   print s

print [s for s in li if txt in s]

两种方法都没有给出输出。

如何将子字符串与列表匹配?

您可以使用set()intersection

In [19]: set.intersection(set(txt.lower().split()), set(s.lower() for s in list1))
Out[19]: {'convenience'}

你可以试试看

>> list1 = ['Convenience','Telecom Pharmacy']

>> txt = '1 convenience store'

>> filter(lambda x: txt.lower().find(x.lower()) >= 0, list1)
['Convenience']

# Or you can use this as well

>> filter(lambda x: x.lower() in txt.lower(), list1)
['Convenience']

我看到两件事。

您是否要查找模式字符串是否与列表中的某个项目完全匹配? 在这种情况下,没有比这更简单的了:

if txt in list1:
    #do something

如果您希望列表不区分大小写,也可以执行txt.upper()或.lower()。但是,如果按照我的理解,要查找是否有一个字符串(在列表中)是txt的一部分,则必须使用“ for”循环:

def find(list1, txt):
#return item if found, false otherwise
for i in list1:
    if i.upper() in txt.upper(): return i

return False

它应该工作。

控制台输出:

>>>print(find(['Convenience','Telecom Pharmacy'], '1 convenience store'))
Convenience
>>>

我认为拆分是您的答案。 这是python文档中的描述:

string.split(s [,sep [,maxsplit]])

返回字符串s的单词列表。 如果不存在可选的第二个参数sep或“无”,则单词由任意的空白字符字符串(空格,制表符,换行符,返回值,换页符)分隔。 如果存在第二个参数sep而不是None,则它指定一个字符串用作单词分隔符。 然后,返回的列表将比字符串中不重复出现的分隔符数量多一个项目。 如果指定了maxsplit,则最多会发生最大拆分次数,并将字符串的其余部分作为列表的最后一个元素返回(因此,列表最多包含maxsplit + 1个元素)。 如果未指定maxsplit或-1,则分割数没有限制(进行所有可能的分割)。

空字符串上split的行为取决于sep的值。 如果未指定sep或将其指定为None,则结果将为空列表。 如果将sep指定为任何字符串,则结果将是一个包含一个元素的列表,该元素为空字符串。

在txt变量上使用split命令。 它会给你一个清单。 然后,您可以在两个列表上进行比较以找到任何匹配项。 我个人会编写嵌套的for循环来手动检查列表,但是python为这项工作提供了很多工具。 以下链接讨论了匹配两个列表的不同方法。

如何比较python中的两个列表并返回匹配项

请享用。 :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM