我一直在解决问题,通过递归方法按降序对元素进行排序,代码如下。
import operator
def do_stuff(elem_list):
if not elem_list:
return None
max_index , max_element = max(enumerate(elem_list) , key = operator.itemgetter(1))
elem_list[max_index],elem_list[0] = elem_list[0],elem_list[max_index]
return do_stuff(elem_list[1:])
p_list = [4,2,3,5,1]
do_stuff(p_list)
print(p_list)
输出 -
[5, 2, 3, 4, 1]
而我似乎无法确定问题所在,以及为什么我不能获得所需的输出?
答案 0 :(得分:1)
我能够通过添加额外的参数来修复您的问题,因为您似乎正在使用insertion sort的递归实现,您需要某种方法来跟踪下一个打开的位置来交换列表中的值。
import operator
def sortl(l, last):
# base case
if last + 1 >= len(l):
return l
# find the max index (mi) and max value in the list
mi, _ = max(enumerate(l[last:]), key = operator.itemgetter(1))
mi += last # caculate the offset in the sublist
l[mi], l[last] = l[last], l[mi] # swap the values
# recursive call
return sortl(l, last + 1)
使用" last + 1"每次,你都可以模拟使用底层子列表,因为调用do_stuff([some_list [1:])不会工作
答案 1 :(得分:0)
Python的切片不是对基础列表的真正引用。请参阅:Can I create a "view" on a Python list?