我无法理解为什么return语句没有返回排序值?
我正在尝试对列表进行排序(不包含重复的数字),我试图将最小的数字推到左边,最大的数字推到右边,发布中间的列表是分割的再次调用相同的函数。
def max_sort(i):
if i == []:
return []
else:
[min_val, max_val] = [min(i), max(i)]
min_pos = i.index(min(i))
max_pos = i.index(max(i))
'''for sorting in ascending order only, min val moves to left, max val moves to right'''
if min_pos == 0 and max_pos == len(i) - 1:
i = i[1:-1]
return [min_val] + [max_sort(i)] + [max_val]
elif min_pos == 0:
i = i[1:]
return [min_val] + max_sort(i)
elif max_pos == len(i) - 1:
i = i[:-1]
return [max_sort(i)] + [max_val]
else:
min_pos_copy = min_pos
for x in range(0, min_pos_copy):
i[min_pos] = i[min_pos - 1]
i[min_pos - 1] = min_val
min_pos = i.index(min(i))
max_pos = i.index(max(i))
max_pos_copy = max_pos
for y in range(max_pos_copy, len(i)-1):
i[max_pos] = i[max_pos + 1]
i[max_pos + 1] = max_val
max_pos = i.index(max(i))
max_sort(i)
max_sort([22, 876, 4, 101, 7, 0])
它会降低到拆分正确序列的水平,但不会将其SPLICE备份。为什么?
答案 0 :(得分:1)
代码中有两个问题。首先,因为max_sort
应该返回list
,所以您不需要将返回值分配给新列表。因此,只需使用return [max_sort(i)] + [max_val]
而不是return max_sort(i) + [max_val]
。您的代码中有几个这样的情况。
另一个问题是else
分支没有返回任何内容。通过将函数中的最后一行更改为return max_sort(i)
,可以轻松解决此问题。通过这些更改,您的代码应该按预期工作。