如何在python中为2.4之前的版本编写排序函数

如何在python中为2.4之前的版本编写排序函数,python,Python,不幸的是,我不得不在2.4之前的版本中使用python,因此我没有内置的排序功能。我需要整理一份清单;我发现这是不可能的 for aName in mylist.sort(lambda x,y:cmp(x.getName,y.getName)): 因为那样我会得到一个错误,说 TypeError:非序列上的迭代 我想做以下工作: for aName in sorted(mylist,key=lambda x:x.getName): 有人能帮我吗?非常感谢 mylist.sort(lambda

不幸的是,我不得不在2.4之前的版本中使用python,因此我没有内置的
排序功能。我需要整理一份清单;我发现这是不可能的

for aName in mylist.sort(lambda x,y:cmp(x.getName,y.getName)):
因为那样我会得到一个错误,说

TypeError:非序列上的迭代

我想做以下工作:

for aName in sorted(mylist,key=lambda x:x.getName):
有人能帮我吗?非常感谢

mylist.sort(lambda x,y:cmp(x.getName,y.getName))
for aName in mylist:
  ...
list.sort
就地排序,没有返回值

def sorted(iter, **rest):
    temp = list(iter)
    temp.sort(**rest)
    return temp

我认为这应该行。

你说你想在排序中为aName做
(mylist,key=lambda x:x.getName):
但是接受了一个做了其他事情的答案

编写将在多个版本的Python2.x上运行的代码是完全可能的。下面介绍如何将
sorted()
功能改装为Python 2.1到2.3。它使用了DSU(装饰排序取消装饰)又名“施瓦茨变换”方法。。。看,但一定要读完整的HOWTO;它的信息量很大

try:
    sorted
    def mysorted(iterable, key, reverse=0):
        return sorted(iterable, key=key, reverse=reverse)
except NameError: # doesn't have "sorted"
    def mysorted(iterable, key, reverse=0):
        temp = [(key(x), x) for x in iterable]
        temp.sort()
        if reverse:
            return [temp[i][1] for i in xrange(len(temp) - 1, -1, -1)]
        return [t[1] for t in temp]

mylist = 'tom dick harriet alfred zechariah'.split()
mykey = lambda x: x[2:] # ignore 1st 2 characters
print mylist
print mysorted(mylist, mykey)
print mysorted(mylist, mykey, reverse=1)
使用Python 2.7.1和2.1.3运行上述脚本会产生相同的输出:

['tom', 'dick', 'harriet', 'alfred', 'zechariah']
['zechariah', 'dick', 'alfred', 'tom', 'harriet']
['harriet', 'tom', 'alfred', 'dick', 'zechariah']

我认为OP需要检查Python的“可变”部分。-1既不提供
sorted
也不提供
key
——即功能限制为slow
cmp
方法。-1 OP希望它在2.4之前的Python上运行,其
sort()
不接受关键字args,并且没有
key
arg。不要思考;相反,请阅读手册并测试代码。