我正在尝试在列表中找到订单号,例如:
lst = [ a, b, [c,d], e, f]
order([c,d]) = 2
order('e') = 3
我想到了这个方式:
def order(item,lst):
if lst[0] == item:
return n
else:
return order(item,lst[0:])
但是它给出了错误(相关的递归深度)。我的错是什么?或者我该怎么做?
答案 0 :(得分:3)
为什么不使用.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
如果您确实需要递归函数,请使用以下命令:
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)
如果递归不是必须但你不能使用.index()
,请使用for循环:
def order(item, l):
for i,v in enumrate(l):
if v == item:
return i
使用这两种方法,只需拨打order([c,d], lst)
答案 1 :(得分:1)
答案 2 :(得分:1)
def order(item, lst,n=0):
if not lst:
return None
elif lst[0] == item:
return n
else:
return order(item, lst[1:],n+1)
lst = ['a', 'b', ['c', 'd'], 'e', 'f']
order(['c', 'd'], lst)
出:
2
答案 3 :(得分:-1)
Python有一个内置函数来执行此操作:
lst = ['a', 'b', ['c', 'd'], 'e', 'f']
assert lst.index(['c', 'd']) == 2
assert lst.index('e') == 3
如果你想修复自己的功能,你需要一个基本案例:
def order(item, lst):
if not lst:
return None
elif lst[0] == item:
return n # You need to calculate n here.
# I'm not doing your homework for you
else:
return order(item, lst[1:])