所以我的递归函数也在列表中查看,看看项目是否已在列表中重复。防爆。 L = [1,2,3,4,3]返回True。我已经完成了但我不允许使用' in'功能,但不知道解决方法。
编辑:我允许使用的唯一内置函数是len
,index
和拼接运算符。
def has_repeats(L):
if L == []:
return False
elif L[0] in L[1:]:
return True
else:
return has_repeats(L[1:])
return False
答案 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:])
由于双递归,这是低效的,但它适用于短列表。