[英]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为这项工作提供了很多工具。 以下链接讨论了匹配两个列表的不同方法。
请享用。 :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.