在即将到来的问题中有一个递归选择排序必须完成。
def selsort(l):
"""
sorts l in-place.
PRE: l is a list.
POST: l is a sorted list with the same elements; no return value.
"""
l1 = list("sloppy joe's hamburger place")
vl1 = l1
print l1 # should be: """['s', 'l', 'o', 'p', 'p', 'y', ' ', 'j', 'o', 'e', "'", 's', ' ', 'h', 'a', 'm', 'b', 'u', 'r', 'g', 'e', 'r', ' ', 'p', 'l', 'a', 'c', 'e']"""
ret = selsort(l1)
print l1 # should be """[' ', ' ', ' ', "'", 'a', 'a', 'b', 'c', 'e', 'e', 'e', 'g', 'h', 'j', 'l', 'l', 'm', 'o', 'o', 'p', 'p', 'p', 'r', 'r', 's', 's', 'u', 'y']"""
print vl1 # should be """[' ', ' ', ' ', "'", 'a', 'a', 'b', 'c', 'e', 'e', 'e', 'g', 'h', 'j', 'l', 'l', 'm', 'o', 'o', 'p', 'p', 'p', 'r', 'r', 's', 's', 'u', 'y']"""
print ret # should be "None"
我知道如何使用键→l.sort(key=str.lower)
来获得此功能。但问题是我要将最大元素而不是最小元素提取到.append(...)
它到递归排序的子列表。
如果我能得到任何帮助,我将非常感激。
答案 0 :(得分:2)
因此。你明白这个问题吗?
让我们来看看你被要求做的事情:
提取最大元素,而不是最小元素,仅将.append(...)提取到递归排序的子列表。
所以,我们做了以下事情:
1)提取最大元素。你明白“提取”在这里意味着什么吗?你知道如何找到最大元素吗?
2)递归地对子列表进行排序。这里,“子列表”包含我们提取最大元素后的所有其他内容。你知道递归是如何工作的吗?您只需使用子列表再次调用sort函数,依赖它来进行排序。毕竟,你的功能的目的是排序列表,所以这应该工作,对吧? :)
3).append()
排序子列表结果的最大元素。这不需要任何解释。
当然,我们需要一个递归的基本案例。我们什么时候有基础案例?当我们不能完全遵循书面的步骤。什么时候发生?好吧,为什么会发生什么?答:如果没有元素,我们就无法提取最大元素,因为那时没有要提取的最大元素。
因此,在函数的开头,我们检查是否传递了一个空列表。如果我们是,我们只返回一个空列表,因为排序一个空列表会产生一个空列表。 (你知道为什么吗?)否则,我们会完成其他步骤。
答案 1 :(得分:0)
sort方法应该做你想要的。如果你想要反过来,只需使用list.reverse()
如果你的工作是制作自己的排序方法,那就可以了。
也许尝试这样的事情:
def sort(l):
li=l[:] #to make new copy
newlist = [] #sorted list will be stored here
while len(li) != 0: #while there is stuff to be sorted
bestindex = -1 #the index of the highest element
bestchar = -1 #the ord value of the highest character
bestcharrep = -1 #a string representation of the best character
i = 0
for v in li:
if ord(v) < bestchar or bestchar == -1:#check if string is lower than old best
bestindex = i #Update best records
bestchar = ord(v)
bestcharrep = v
i += 1
del li[bestindex] #delete retrieved element from list
newlist.append(bestcharrep) #add element to new list
return newlist #return the sorted list