簡體   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