使用递归查找列表中元素的索引

时间:2011-06-26 00:44:42

标签: python

def index(L,v)
    ''' Return index of value v in L '''
    pass

我需要帮助使用递归来实现这个函数。 对于递归的东西真的很新,所以任何建议都会有所帮助。!

请注意,L是一个列表。 v是一个值。

8 个答案:

答案 0 :(得分:2)

有效

def recursive_index(L, v):
    return 0 if L[0] == v else 1 + recursive_index(L[1:], v)

但非常愚蠢(并且仅在值存在时才有效)

您可以添加if v not in L: return -1以使其适用于任何情况,但这甚至是最糟糕的。

它真的必须递归吗?

答案 1 :(得分:1)

为什么有人会为此编写递归代码?

>>> [1,2,4,8].index(4)
2

答案 2 :(得分:1)

我认为这是作业。

所以你需要了解递归。这是一个例子:

def countdown(n):
    if n == 0:
        print "Hello World!"
    else:
        print n
        countdown(n-1)

你需要从一个起点开始,在你的情况下,它可能是第0个元素。

您需要一个终点,该终点应该是length - 1或找到元素时。

如果还有其他事情应该在这里做,如上所述,使用修改后的倒计时版本。

答案 3 :(得分:1)

另一种方式:

def rec(l,v, index=0):
    try:
        if l[index] == v:
            return index
    except IndexError:
        return -1            

    return rec(l,v,index+1)

答案 4 :(得分:0)

L = [1, 2, 3, 4, 5, 6, 7, 11, 13]

def index(L, v):
    if len(L) == 0:
            return -1000000
    elif L[0] == v:
        return 0
    else:
        return 1 + index(L[1:], v)

print index(L, 7)
print index(L, 13)
print index(L, 100)

*远程口译员重新初始化*

6

8

-999991

答案 5 :(得分:0)

假设0索引,下面的代码将返回元素的索引(如果它存在),如果它不包含在列表中,则返回-1:

def index(L, v):
    if L == []:
        return -1
    elif L[0] == v:
        return 0
    rv = index(L[1:], v)
    if rv < 0:
        return rv
    return rv + 1

答案 6 :(得分:0)

这是一个尾递归版本:

def indexof(elem, list_):
    return indexof_tailrec(elem, list_, 0)

def indexof_tailrec(elem, list_, index):
    if index >= len(list_):
        return None
    if list_[index] == elem:
        return index
    return indexof_tailrec(elem, list_, index + 1)

但请注意,Python没有尾调用优化(至少不是我所知道的)。

答案 7 :(得分:0)

使用二分搜索查找元素第一次出现的递归解决方案是这样的 -

/proc/self/maps