查找列表中元素的顺序号

Ezg*_*ora -1 python recursion

我正在尝试查找列表中某个项目的订单号,例如:

lst = [ a, b, [c,d], e, f]

order([c,d]) = 2
order('e') = 3
Run Code Online (Sandbox Code Playgroud)

我是这样想的:

def order(item,lst):
    if lst[0] == item:
       return n
    else:
       return order(item,lst[0:])
Run Code Online (Sandbox Code Playgroud)

但它给出了错误(相关的递归深度)。我的错是什么?或者我该怎么做?

小智 6

为什么不直接使用.index()

In [1]: l = [ a, b, [c,d], e, f]
In [2]: l.index([c,d])
Out[2]: 2
In [4]: l.index(e)
Out[4]: 3
Run Code Online (Sandbox Code Playgroud)

如果您确实需要递归函数,请使用以下命令:

def order(item, l, n=0):
    if l:
        if l[0] == item:
            return n
        elif len(l) >= 2: # for python 2, use "else:"
            return order(item, l[1:], n+1)
Run Code Online (Sandbox Code Playgroud)

如果递归不是必须的但您不能使用.index(),请使用 for 循环:

def order(item, l):
    for i,v in enumrate(l):
        if v == item:
            return i
Run Code Online (Sandbox Code Playgroud)

使用这两种方法,只需调用 order([c,d], lst)