您可以像这样编写自己的sorted()
:
try:
sorted
except NameError:
def sorted(seq, key=None):
lst = list(seq) # get copy of list
if key is not None:
def my_cmp(a, b):
return cmp(key(a), key(b))
else:
my_cmp = cmp
lst.sort(my_cmp)
return lst
sorted()
如果没有内置的,这只会定义你的 new sorted()
。首先,我们尝试评估名称sorted
,如果我们得到 aNameError
我们定义自己的名称。我正在使用map(None, seq)
一种快速的方法来从seq
.
或者,如果我们想按照@gnibbler 的建议使用 Schwartzian 变换以获得最大效率:
try:
sorted
except NameError:
import operator as op
def sorted(seq, key=None):
if key is not None:
lst = [(key(x), x) for x in seq]
lst.sort()
return map(lambda x: x[1], lst)
else:
lst = list(seq) # get list from sequence
lst.sort()
return lst