如何根据不同的索引对 python 列表进行排序?
How to sort a python list, based on different indices?
例如,我们有一个列表列表。
该列表应该根据某个索引 i 进行反向排序,如果存在平局,则应根据条件对它们进行升序或降序排序。
例如:
名单是[['A', 2, 4.2], ['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5]]
如何排序以使结果为:
[['B', 4, 4.5], ['A', 2, 4.2], ['D', 2, 3.5], ['C', 2, 3.3]]
[['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5], ['A', 2, 4.2]]
在第一种情况下,我希望它们根据 index 1
降序排序,然后如果 index 1
有平局则再次按 index 2
降序排序。
在第二种情况下,我希望它们根据 index 1
降序排序,然后如果 index 1
上有平局则按 index 2
升序排序。
我能想到的是:
myList = [['A', 2, 4.2], ['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5]]
print(sorted(myList, key= lambda x: (x[1], x[2]), reverse=True))
print(sorted(myList, key= lambda x: (x[1], -1*x[2]), reverse=True))
输出
[['B', 4, 4.5], ['A', 2, 4.2], ['D', 2, 3.5], ['C', 2, 3.3]]
[['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5], ['A', 2, 4.2]]
解释
sorted
函数有两个参数:一个可迭代对象(可以是列表、集合或任何可迭代对象)和一个键(定义排序模式)。在 key 参数中,我定义了一个元组((x[1], x[2])
)来指示排序顺序,如果索引为 1 的元素是并列的,那么它会去检查索引号 2。第二个排序函数是相同的,但是当它转到索引号为 2 的元素时,它会检查其负值以按升序对它们进行排序。
例如,我们有一个列表列表。 该列表应该根据某个索引 i 进行反向排序,如果存在平局,则应根据条件对它们进行升序或降序排序。
例如:
名单是[['A', 2, 4.2], ['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5]]
如何排序以使结果为:
[['B', 4, 4.5], ['A', 2, 4.2], ['D', 2, 3.5], ['C', 2, 3.3]]
[['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5], ['A', 2, 4.2]]
在第一种情况下,我希望它们根据 index 1
降序排序,然后如果 index 1
有平局则再次按 index 2
降序排序。
在第二种情况下,我希望它们根据 index 1
降序排序,然后如果 index 1
上有平局则按 index 2
升序排序。
我能想到的是:
myList = [['A', 2, 4.2], ['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5]]
print(sorted(myList, key= lambda x: (x[1], x[2]), reverse=True))
print(sorted(myList, key= lambda x: (x[1], -1*x[2]), reverse=True))
输出
[['B', 4, 4.5], ['A', 2, 4.2], ['D', 2, 3.5], ['C', 2, 3.3]]
[['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5], ['A', 2, 4.2]]
解释
sorted
函数有两个参数:一个可迭代对象(可以是列表、集合或任何可迭代对象)和一个键(定义排序模式)。在 key 参数中,我定义了一个元组((x[1], x[2])
)来指示排序顺序,如果索引为 1 的元素是并列的,那么它会去检查索引号 2。第二个排序函数是相同的,但是当它转到索引号为 2 的元素时,它会检查其负值以按升序对它们进行排序。