如何仅使用递归在python中创建列表搜索程序?

时间:2013-02-25 13:16:26

标签: python python-2.7

我正在尝试创建一个python程序(仅使用递归,没有循环),该程序从用户获取名称列表以及搜索列表的名称。程序必须判断名称是否存在于给定列表中。此外,如果列表中的元素为"James Christ"并且我们搜索"James",则程序应返回true。 我做了一半的程序。但我的代码不执行附加功能。 我的代码是这样的:

L1=list(input("Enter the list of names : "))
x=input("Enter the name to search : ")

def search(L1,x):
    if len(L1)==0:
        return "Not found!!"
    else:
        if x==L1.pop(0):
         return "Entry found!!"
        else:
         return search(L1,x)

print search(L1,x)

请帮帮我!

2 个答案:

答案 0 :(得分:4)

这是一种不破坏原始列表的解决方案。

montys = [
    'John Cleese', 'Graham Chapman', 'Terry Gilliam',
    'Eric Idle', 'Terry Jones', 'Michael Palin']
actor = 'Idle'


def search(data, word):
    if len(data) == 0:
        return "Not found!"
    else:
        if word in data[0]:
            return "Entry found!"
        else:
            return search(data[1:], word)

print(search(montys, actor))

有关更多信息,请参阅Junuxx的答案。

答案 1 :(得分:2)

而不是if x==L1.pop(0),请使用if x in L1.pop(0)

这适用于JamesJames Christ,也适用于Jamesy BobSuperJames

要确保输入与列表中名称的整个单词匹配,您可以执行if x in L1.pop(0).split()。这可以通过将James Christ拆分为单词列表(['James', 'Christ'])并检查'James'是否作为该列表中的单词之一而发生。