Python递归返回none,不确定这里发生了什么



遇到问题,试图将计数器作为返回值,但没有得到任何结果。我很确定这是我犯的一些愚蠢的错误,但经过2小时的查找和谷歌搜索,我决定伸出援手,谢谢。

def minimumSwaps(arr):
def swapper(counter, arr2):
out_of_place = []
for i in range(len(arr2)):
if arr2[i] is not i + 1:
out_of_place.append([abs(arr2[i] - (i + 1)), arr2[i], i])
if len(out_of_place) == 0:
print(counter, arr2)
return counter
out_of_place = sorted(out_of_place, reverse=True)
max1 = out_of_place[0]
max2 = out_of_place[1]
arr2[max1[2]] = max2[1]
arr2[max2[2]] = max1[1]
counter += 1
swapper(counter, arr2)
return swapper(0, arr)

print(minimumSwaps([1, 3, 5, 2, 4, 6, 7]))

您的内部函数缺少返回值

def minimumSwaps(arr):
def swapper(counter, arr2):
out_of_place = []
for i in range(len(arr2)):
if arr2[i] is not i + 1:
out_of_place.append([abs(arr2[i] - (i + 1)), arr2[i], i])
if len(out_of_place) == 0:
print(counter, arr2)
return counter
out_of_place = sorted(out_of_place, reverse=True)
max1 = out_of_place[0]
max2 = out_of_place[1]
arr2[max1[2]] = max2[1]
arr2[max2[2]] = max1[1]
counter += 1
return swapper(counter, arr2)
return swapper(0, arr)

print(minimumSwaps([1, 3, 5, 2, 4, 6, 7])) # prints 3

在递归中,您必须将当前数据(第n次调用(返回到上一次调用(第n-1次调用(,否则它将向上一次呼叫返回"None",依此类推。在这里,我添加了return to swapper((函数:

def minimumSwaps(arr):
def swapper(counter, arr2):
out_of_place = []
for i in range(len(arr2)):
if arr2[i] is not i + 1:
out_of_place.append([abs(arr2[i] - (i + 1)), arr2[i], i])
if len(out_of_place) == 0:
print(counter, arr2)
return counter
out_of_place = sorted(out_of_place, reverse=True)
max1 = out_of_place[0]
max2 = out_of_place[1]
arr2[max1[2]] = max2[1]
arr2[max2[2]] = max1[1]
counter += 1
return swapper(counter, arr2)
return swapper(0, arr)

print(minimumSwaps([1, 3, 5, 2, 4, 6, 7]))

这返回了3 的期望输出

最新更新