我有一个列表,我想查找字符串是否存在于字符串列表中。
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]
这两种方法都没有给出输出。
如何将子字符串与列表匹配?
答案 0 :(得分:3)
您可以使用set()
和intersection
:
In [19]: set.intersection(set(txt.lower().split()), set(s.lower() for s in list1))
Out[19]: {'convenience'}
答案 1 :(得分:0)
你可以试试这个,
>> 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']
答案 2 :(得分:0)
我看到两件事。
是否要查找模式字符串是否与列表中的项完全匹配?在这种情况下,没有什么比这更简单了:
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
>>>
答案 3 :(得分:0)
我认为分裂是你的答案。以下是python文档中的描述:
string.split(s [,sep [,maxsplit]])
返回字符串s的单词列表。如果可选的第二个参数sep不存在或为None,则这些单词将被任意分隔 空格字符串(空格,制表符,换行符,返回, 换页)。如果第二个参数sep存在而不是None,那么 指定要用作单词分隔符的字符串。返回的列表 然后将有一个项目超过非重叠的数量 字符串中出现分隔符。如果给出maxsplit,at 发生大多数maxsplit分裂数,以及字符串的其余部分 作为列表的最后一个元素返回(因此,列表将具有 最多maxsplit + 1个元素)。如果未指定maxsplit或-1,则 分裂数量没有限制(所有可能的分裂都是 制造)。
拆分空字符串的行为取决于sep的值。如果未指定sep或指定为None,则结果为 一个空列表。如果将sep指定为任何字符串,则结果为a 包含一个空字符串元素的列表。
在txt变量上使用split命令。它会给你一个清单。然后,您可以在两个列表上进行比较以查找任何匹配项。我个人会编写嵌套的for循环来手动检查列表,但是python为这个工作提供了很多工具。以下链接讨论了匹配两个列表的不同方法。
How can I compare two lists in python and return matches
享受。 : - )