我有一项任务,我已经被困了几天了。我必须递归地判断一个列表是否有重复,但除了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:])
但问题在于它只是将第一个元素与其余元素进行比较,而不是将每个元素与其余元素进行比较。没有跑步计数器或其他东西,我无法弄清楚如何做到这一点。有什么建议吗?
答案 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:])