按值对枚举列表进行排序

3

MWE:

list1 = [2,5,46,23,9,78]
list1 = list(enumerate(list1))

现在假设我想按照索引1(即原始列表list1)对此列表进行排序,以升序方式进行。

我希望得到既包含索引又包含值的结果。

list2 = sorted(list1[1], key=float)

如果可以的话,在枚举列表之前考虑对其进行排序:list(enumerate(sorted(list1))),除非您打算保留对原始索引的引用,在这种情况下,这种方法不适用。 - user7851115
3个回答

8

item[1]为关键字进行排序:

>>> list2 = sorted(list1, key=lambda x:x[1])
>>> list2
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]

3

像这样的吗?

>>> 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] 进行操作。

2

您需要传入整个列表(而不仅仅是第一个元素),并使用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)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接