python-sort()与sorted()区别与联系

sort()应该是list.sort()是一个仅用在list结构中的函数,sorted()是一个内置函数,可以对任何可迭代的对象进行排序操作,并且不会改变原结构,产生新排序后的结果。

list.sort()

list.sort(key=(比较的关键字),reverse=False(升序,默认) or True (降序) )

sort()函数,从列表中拿出每个元素,按照给出的key来进行比较,最后返回排序结果。 

例子1:按照单词长度排序

word = ['time','me','aganist']
word.sort(key = lambda x:len(x)) 
#从列表中拿出一个单词x,返回他的长度

# word.sort() ##最原始的就是按照单词顺序排序
 
print(word) #-> ['me', 'time', 'aganist']

例子2:按照数字平方大小排序

num = [-1,0,1,4,-9,8] 
num.sort(key = lambda x:x**2,reverse = True) #降序

print(num) #->[-9, 8, 4, -1, 1, 0]

sorted()

sorted(iterable(可迭代对象),key,reverse )

sorted()函数,从可迭代对象中拿出每个元素,按照给出的key来进行比较,最后返回排序结果。

例子3(列表使用):

word = ['time','me','aganist']
word_1 = sorted(word,key = lambda x:len(x))
print(word_1) #与例1相同结果

例子4,(构造好的词频,统计前频率最高的几个单词):

dic = {'mother':1,'sun':3,'uncle':2,'sister':9}

dic = sorted(dic.items(),key = lambda x:x[1],reverse =True)

### 注意,必须是dic.items(),dic是可迭代对象类型,但dic默认可迭代对象是key
print(dic[:3]) #前三个单词

例子5,列表中不仅是int类型,还有char类型,不可比较时,利用functools.cmp_to_key()。Python2中的sorted 可以指定cmp关键字参数,就是当遇到需要自定义比较操作的数据可以通过 cmp=compare 来实现,不需要像Python3中还需要导入functools.cmp_to_key实现。

import functools

nums = [3, 1.5, 2.5, '6', '2.5']
def compare(x1, x2):
    if isinstance(x1, str):
        x1 = float(x1)
    if isinstance(x2, str):
        x2 = float(x2)

    return x1 - x2

>>>sorted(nums, key=functools.cmp_to_key(compare))
[1.5, 2.5, '2.5', 3, '6']

例子同样来自上面的链接,说明一下为什么比较结果是这样的。functools.cmp_to_key(),接受两个参数也就是从L中按照一定的顺序拿出两个位置的内容,如3和‘6’。然后带入到compare(自定义)函数中。用定义的方法比较他们,最后返回一个数字。如果是正数,代表大于,负数是小于,0是等于。如果是3和'6'带进去,那么输出的意思就是3大于‘6’。注意是string类型的6。

补一个题:面试题45. 把数组排成最小的数  来自题解:@Krahets

题目是要按照题中所述,总结比较规则,然后按照规则排序。

class Solution:
    def minNumber(self, nums: List[int]) -> str:
        def sort_rule(x, y): # 比较x,y大小
            a, b = x + y, y + x
            if a > b: return 1 # x+y >y+x -----> x>y
            elif a < b: return -1  ## 小于
            else: return 0  ##等于
        
        strs = [str(num) for num in nums]
        strs.sort(key = functools.cmp_to_key(sort_rule)) ##比较规则,按照定义的比较规则去排序
        return ''.join(strs)

补充一点:sort()函数的时间复杂度是O(NlogN),与内部机制(Timsort)有关,详细介绍点链接

参考:

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

https://www.runoob.com/python3/python3-func-sorted.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Foneone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值