2017-06-17 69 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

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