对于赋值,我必须递归地找到最大元素的索引。我怎么能这样做?
我已尝试过以下功能,但我的结果一直不正确:
def maxElement(A):
if len(A)==1:
return A[0]
else:
max=maxElement(A[1:])
if A[0]>max:
return A[0]
else:
return max
A=[9, 16, 100, 36, 4, 25, 1, 81, 49, 9, 64]
print(maxElement(A))
我应该2
,因为它是第三个元素,但我不断获得100
。
答案 0 :(得分:1)
简单的方法是使用max
和index
作为@Harwee显示,但您也可以使用此递归函数执行此操作
def find_max_pos(lista,pos=0,pos_item=None) -> "(index,item)":
if not lista:
return pos_item
else:
item = lista[0]
resto = lista[1:]
if pos_item is None:
return find_max_pos(resto,pos+1,(pos,item))
prev = pos_item[1]
if prev >= item:
return find_max_pos(resto,pos+1,pos_item)
else:
return find_max_pos(resto,pos+1, (pos,item) )
使用pos
参数跟踪当前位置,使用pos_item
跟踪最大项目及其位置,基本情况为空列表,如果您返回的是并且在每次迭代中减少列表,您可以对其进行修改,这样您就不会继续使用其他参数max_pos
复制列表
def find_max_pos_v2(lista,pos=0,pos_item=None,max_pos=None) -> "(index,item)":
if max_pos is None:
max_pos = len(lista)
if pos >= max_pos:
return pos_item
item = lista[pos]
if pos_item is None:
return find_max_pos_v2(lista,pos+1,(pos,item),max_pos)
prev = pos_item[1]
if prev >= item:
return find_max_pos_v2(lista,pos+1,pos_item,max_pos)
else:
return find_max_pos_v2(lista,pos+1,(pos,item),max_pos )
如果您只希望position或max元素相应地修改pos_item
的使用。
请注意,我将所有其他参数默认为一些方便的值,然后相应处理。
例如
>>> A=[9, 16, 100, 36, 4, 25, 1, 81, 49, 9, 64]
>>> find_max_pos(A)
(2, 100)
>>> find_max_pos_v2(A)
(2, 100)
>>>
答案 1 :(得分:0)
我不知道你的意思 类似于此的事情将完成这项工作
A=[9, 16, 100, 36, 4, 25, 1, 81, 49, 9, 64]
x = max(A)
print A.index(x)
答案 2 :(得分:0)
你需要随时跟踪其索引的最大元素和当前索引,返回max元素的索引:
def max_ind(l, i, mx, mx_i):
if not l:
return mx_i
if l[0] > mx:
mx = l[0]
mx_i = i
i += 1
return max_ind(l[1:], i, mx, mx_i)
l = [9, 16, 100, 36, 4, 25, 1, 81, 49, 9, 64]
print(max_ind(l, 0, l[0], 0))
2
如果你想要元素和索引:
def max_ind(l, i, mx, mx_i):
if not l:
return mx_i, mx
if l[0] > mx:
mx = l[0]
mx_i = i
i += 1
return max_ind(l[1:], i, mx, mx_i)
l = [9, 16, 100, 36, 4, 25, 1, 81, 49, 9, 64]
print(max_ind(l, 0, l[0], 0))
(2, 100)
您也可以在不切片的情况下执行此操作:
def max_ind(l, mx, i, mx_i):
if not l.__length_hint__():
return mx_i
e = next(l)
if e > mx:
mx = e
mx_i = i
i += 1
return max_ind(l, mx, i, mx_i)
l = [9, 16, 100, 36, 4, 25, 1, 81, 49, 9, 64]
print(max_ind(iter(l), l[0], 0, 0))