Python递归没有'in'工作

时间:2015-03-21 03:28:01

标签: python list recursion

所以我的递归函数也在列表中查看,看看项目是否已在列表中重复。防爆。 L = [1,2,3,4,3]返回True。我已经完成了但我不允许使用' in'功能,但不知道解决方法。

编辑:我允许使用的唯一内置函数是lenindex和拼接运算符。

def has_repeats(L):
    if L == []:
        return False
    elif L[0] in L[1:]:
        return True
    else:
        return has_repeats(L[1:])
    return False

2 个答案:

答案 0 :(得分:4)

您可以考虑使用递归来按相反的顺序比较列表,使其索引相同,因为默认情况下index会返回第一个匹配项,如下所示:

def has_repeats(L):
    if len(L) <= 1:
        return False
    if L.index(L[-1]) != len(L) - 1:
        return True
    return has_repeats(L[:-1])

用法:

has_repeats([1, 2, 3, 4, 3])
True

has_repeats([1, 2, 3, 4, 0])
False

所以基本上检查最后一项len(L) - 1的索引与L.index的索引相同,它应该返回第一次出现,如果它们不匹配,则在最后一项之前有重复,并以递归方式进行。

答案 1 :(得分:1)

另一种方法是比较列表中的第一个和最后一个元素,从两端逐步丢弃。

def has_repeats(L):
    if len(L) < 2:
        return False
    return L[0] == L[-1] or has_repeats(L[:-1]) or has_repeats(L[1:])

由于双递归,这是低效的,但它适用于短列表。