2017-06-17 44 views
0

我一直在嘗試不同的方案,下面的代碼似乎並沒有得到正確的代碼。我試圖在一個單詞列表中查找並返回True。我正在尋找的詞是「傑克」,但列表中包含「傑基」,這是不正確的,但代碼返回True。尋找列表中的字符串

def name_finder(listName,name): 
if listName.find(name)!= -1: 
    return True 
else: 
    return False 

nameList = "Joshua Diaddigo, Marguerite Murrell, Jackie Elliott" 

print(name_finder(nameList,"Jack")) 
print("Done!") 

任何幫助將不勝感激,即使它是一個暗示從哪裏開始。

+0

您需要在發佈Python代碼時準確地重現您的縮進。否則,你會在人們試圖幫助你的代碼中引入新的問題。 – khelwood

+0

您正在嘗試檢查字符串「nameList」中是否存在「Jack」。所以,你只會得到'真' – voidpro

+0

對不起,我想找「傑克」 – pokey

回答

1

的一種方法是使用regex module

def name_finder(lst, name): 
    re_str = '(^|\ |,){}($|\ |,)'.format(name) 
    return re.search(re_str, lst) != None 

正則表達式匹配<或「空間」或「逗號」>接着名稱後跟<'「的字符串的開頭」字符串末尾「或」空格「或」逗號「>。有可能會寫一個正則表達式...

+0

'lst.split()'只會被空格分割,但有一些元素用','。必須再次循環並刪除','。 –

+1

@ChihebNexus你是對的;根本不起作用!刪除它...謝謝! –

0

您需要將name_list中轉換成python的列表數據類型更優雅的方式,你可以這樣做,通過這種方式,

nameList = "Joshua Diaddigo, Marguerite Murrell, Jackie Elliott" 
nameList = nameList.split(',') 
name = "Jack" 

def name_finder(nameList,name): 
    if name in nameList: 
     return True 
    else: 
     return False 

我希望這有助於。

+1

除了你的代碼縮進已關閉,'def name_finder(nameList。分割(','),名稱):'在Python中是無效的語法... –

+0

對不起,現在,我已經更新了我的答案 –

1

如果您嘗試在字符串中查找整個單詞,則可以使用regex字邊界符號,\b

import re 
def name_finder(names, name): 
    return (re.search(r'\b%s\b'%re.escape(name), names) is not None) 
+0

是的,那是比我更優雅! –

相關問題