Python:创建一个带有列表的递归函数,并返回一个包含前一个列表元素但没有重复项的列表?

时间:2016-02-23 06:24:32

标签: python list recursion

这是我提出的非递归代码。

def newlst(lst):
    new_lst = []

    for element in lst:
        if element not in new_lst:
            new_lst.append(element)

    return new_lst

现在这是我对递归版本的尝试:

def newlst(lst):
    new_lst = []

    if lst == []:
        return new_lst

    if lst[0] in new_lst:
        new_lst.append(lst[0])
    else:
        return newlst(lst[1:])

我知道每次函数调用自己时我都会将newlst赋值给一个空列表值,我不知道在哪里分配它...所以我迷路了。

2 个答案:

答案 0 :(得分:1)

同意这是一种删除重复项的糟糕方法,但如果你真的想要一个递归解决方案:

def newlst(lst):
    if not lst:
        return lst

    new_lst = newlst(lst[1:])
    return new_lst if lst[0] in new_lst else [lst[0]] + new_lst

>>> newlst([1,1,2])
[1, 2]

答案 1 :(得分:0)

def newlst(lst):  
    if lst == []:
        new_list = []          
    elif lst[0] in lst[1:]:
        new_list = newlst(lst[1:])        
    else:
        new_list =[lst[0]]+ newlst(lst[1:])                        
    return new_list