MWE:
list1 = [2,5,46,23,9,78]
list1 = list(enumerate(list1))
现在假设我想按照索引1(即原始列表list1)对此列表进行排序,以升序方式进行。
我希望得到既包含索引又包含值的结果。
list2 = sorted(list1[1], key=float)
以item[1]
为关键字进行排序:
>>> list2 = sorted(list1, key=lambda x:x[1])
>>> list2
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]
像这样的吗?
>>> from operator import itemgetter
>>> sorted(list1, key=itemgetter(1))
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]
key
提供一个参数函数,我们指定了由 sorted
使用的列表元素的比较键。itemgetter
是一个很好的功能包装器,可以围绕项获取运算符 [i]
进行操作。您需要传入整个列表(而不仅仅是第一个元素),并使用lambda函数按值x [1]
进行排序。
>>> list1 = [2,5,46,23,9,78]
>>> list2 = list(enumerate(list1))
>>> list2
[(0, 2), (1, 5), (2, 46), (3, 23), (4, 9), (5, 78)]
>>> list3 = sorted(list2, key=lambda x: x[1])
>>> list3
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]
list(enumerate(sorted(list1)))
,除非您打算保留对原始索引的引用,在这种情况下,这种方法不适用。 - user7851115