在您的情况下,您根本不需要排序,因为您只想要一个列举的反向列表names:
>>> list(enumerate(names[::-1])) # reverse by slicing
[(0, 'x'), (1, 't'), (2, 'a'), (3, 'd')]
>>> list(enumerate(reversed(names))) # but reversed is also possible
[(0, 'x'), (1, 't'), (2, 'a'), (3, 'd')]
但是如果你需要对它进行排序,那么你应该使用sorted
(由@utdemir或@Ulrich Dangel提供),因为它可以在Python2(zip
和itertools.zip
)和Python3(zip
)上工作,并且不会像.sort(...)
一样失败并出现AttributeError
(因为它只能在Python2 zip
上运行,因为那里的zip
返回一个list
):
>>>
>>> zipped = zip(names, vals)
>>> zipped.sort(lambda x: x[1])
AttributeError: 'zip' object has no attribute 'sort'
>>>
>>> from itertools import izip
>>> zipped = izip(names, vals)
>>> zipped.sort(lambda x: x[1])
AttributeError: 'itertools.izip' object has no attribute 'sort'
但是sorted
在每种情况下都有效:
>>> zipped = izip(names, vals)
>>> sorted(zipped, key=lambda x: x[1])
[('x', 0), ('t', 1), ('a', 2), ('d', 3)]
>>> zipped = zip(names, vals) # python 3
>>> sorted(zipped, key=lambda x: x[1])
[('x', 0), ('t', 1), ('a', 2), ('d', 3)]
sorted
和sort
两个函数。 - JasonFruit.sort()
会原地对列表进行排序,而sorted
可以用于任何可迭代对象,但需要使用额外的存储空间来完成任务。 - Ned Batcheldersorted
与其他特殊的Python语法一致,包括in
、len
和reversed
,它们依赖于__contains__
、__len__
和__getitem__
+__len__
,分别(我认为sorted
需要__getitem__
和__len__
,但我不确定)。在许多方面,它也类似于基于__setitem__
和__getitem__
的[]
语法,或者初始化__call__
的()
语法。它们是内置函数,将特殊的内部函数转换为清晰的外部语法。 - Jeff Tratner