Underwood 发表于 2021-8-12 11:02:52

.sort()排序问题。

def takeSecond(elem):
    return elem


x = [(2, 2), (3, 4), (4, 1), (1, 3)]
x.sort(key=takeSecond)
print(x)
# [(4, 1), (2, 2), (1, 3), (3, 4)]

x.sort(key=lambda a: a)
print(x)
# [(1, 3), (2, 2), (3, 4), (4, 1)]



这个key=takeSecond说是指定第二个元素为排序方法,这个不理解如何以第二个元素为排序方法的。

逃兵 发表于 2021-8-12 11:06:26

切片是第二个元素

等价于x.sort(key=lambda takeSecond: takeSecond)

Underwood 发表于 2021-8-12 11:24:51

逃兵 发表于 2021-8-12 11:06
切片是第二个元素

等价于x.sort(key=lambda takeSecond: takeSecond)

还是不太懂,我想知道它是哪种规则排列的,比如升序降序之类的。主要现在我不太理解这个规则

逃兵 发表于 2021-8-12 11:28:21

Underwood 发表于 2021-8-12 11:24
还是不太懂,我想知道它是哪种规则排列的,比如升序降序之类的。主要现在我不太理解这个规则

https://www.runoob.com/python/att-list-sort.html

kogawananari 发表于 2021-8-12 13:45:02

逃兵 发表于 2021-8-12 11:28
https://www.runoob.com/python/att-list-sort.html

你发错了 你发的python2的

kogawananari 发表于 2021-8-12 13:46:31

本帖最后由 kogawananari 于 2021-8-12 13:53 编辑

原本python2的sort有cmp参数可以控制用什么排序以及排序升降 现在python3里没了{:10_289:}

可以自己实现一个sort函数 算法是快速排序 然后快排中交换变量 用的是你传入的cmp函数 处理交换的两个对象就行了一般默认是两个对象做减法 大于0就交换位置如果你传进去的cmd函数return的是差小于0 就会变成降序做差的是两个对象的第二项或者其他属性 也可以实现

逃兵 发表于 2021-8-12 13:52:48

kogawananari 发表于 2021-8-12 13:46
原本python2的sort有cmp参数可以控制用什么排序以及排序升降 现在python3里没了

{:10_302:}又发错了吗
https://www.runoob.com/python3/python3-att-list-sort.html

kogawananari 发表于 2021-8-12 13:55:12

逃兵 发表于 2021-8-12 13:52
又发错了吗
https://www.runoob.com/python3/python3-att-list-sort.html

主要是你发的里面那个cmp参数实属太犯规 另外两个参数key和reverse意义不大了 如果cmp能用也就没这个问题了 看我另一个回答{:10_293:}

Twilight6 发表于 2021-8-16 07:19:04

Underwood 发表于 2021-8-12 11:24
还是不太懂,我想知道它是哪种规则排列的,比如升序降序之类的。主要现在我不太理解这个规则



他是按照你 key 函数中取出的数大小排序,默认从小到大

页: [1]
查看完整版本: .sort()排序问题。