Python递归检查重复

时间:2015-03-26 21:13:17

标签: python list recursion

我有一项任务,我已经被困了几天了。我必须递归地判断一个列表是否有重复,但除了len()之外我不能使用任何循环或内置函数。我也不允许使用' in'功能。如果列表L有重复,则返回True,否则返回False。这就是我能够弄清楚的:

def has_repeats(L):
    if len(L) <= 1:
        return False
    elif L[0] == L[1]:
        return True
    else: return has_repeats(L[0] + L[2:])

但问题在于它只是将第一个元素与其余元素进行比较,而不是将每个元素与其余元素进行比较。没有跑步计数器或其他东西,我无法弄清楚如何做到这一点。有什么建议吗?

2 个答案:

答案 0 :(得分:4)

你几乎拥有它。除了使用列表的其余部分检查第一个元素外,还需要以相同的方式检查 second

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

您还可以将其压缩为以下表示:

def has_repeats(L):
    return len(L)>1 and L[0]==L[1] or has_repeats([L[0]]+L[2:]) or has_repeats(L[1:])

答案 1 :(得分:0)

使用帮助函数:

 def helper(ele, rest):
    if not rest:
        return False
    return ele == rest[0] or helper(ele, l[1:])

def has_repeats(l):
    if not l:
        return False
    return helper(l[0], l[1:]) or has_repeats(l[1:])