pythonsort[转载]

薛定谔 | 先导化合物优化与相互作用可视化 当获得针对某个靶点的先导分子后,想要在此基础上进行化学结构修饰。为了提升化学改造的成功率可以采用本教程方法进行结构虚拟改造/优化。每用薛定谔处理一个新任务,第一步必须创建新的project以方便日后管理。选项卡中修改工作路径(可以方便地找到输出文件) 阅读详情

算法就是为了解决某一个问题而采取的具体有效的操作步骤

算法的复杂度,表示代码的运行效率,用一个大写的O加括号来表示,比如O(1),O(n)

认为算法的复杂度是渐进的,即对于一个大小为n的输入,如果他的运算时间为n3+5n+9,那么他的渐进时间复杂度是n3

递归

递归就是在函数中调用本身,大多数情况下,这会给计算机增加压力,但是有时又很有用,比如下面的例子:

汉诺塔游戏

汉诺塔

把A柱的盘子,移动到C柱上,最少需要移动几次,大盘子只能在小盘子下面

递归实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

def hanoi(x, a, b, c):  # 所有的盘子从 a 移到 c

 

    if x > 0:

        hanoi(x-1, a, c, b)  # step1:除了下面最大的,剩余的盘子 从 a 移到 b

        print('%s->%s' % (a, c))  # step2:最大的盘子从 a 移到 c

        hanoi(x-1, b, a, c)  # step3: 把剩余的盘子 从 b 移到 c

 

hanoi(10, 'A', 'B', 'C')

 

#计算次数

 

def h(x):

    num = 1

    for i in range(x-1):

        num = 2*num +1

 

    print(num)

h(10)

 

用递归打印斐波那契数列

1

2

3

4

5

6

7

def fei(n):

    if n == 0:

        return 0

    elif n == 1:

        return 1

    else:

        return fei(n-1)+fei(n-2)

 

你会发现,即使n只有几十的时候,你的计算机内存使用量已经飙升了

其实,如果结合生成器,你会发现不管n有多大,都不会出现卡顿,但这是生成器的特性,本篇博客不重点介绍

1

2

3

4

5

6

7

8

9

10

# 结合生成器

def fei(n):

    pre,cur = 0,1

    while n >=0:

        yield pre

        n -= 1

        pre,cur = cur,pre+cur

 

for i in fei(400000):

    print(i)

 

关于递归次数,Python中有个限制,可以通过sys模块来修改


 

 


 

查找

1.顺序查找

这个没的说,就是for循环呗,时间复杂度O(n)


 

 

2.二分查找

时间复杂度O(logn)

就是一半一半的查找,看目标值在左边一半还是右边一半,然后替换左端点或者右端点,继续判断

非递归版本:

1

2

3

4

5

6

7

8

9

10

11

12

13

def binary_serach(li,val):

    low = 0

    high = len(li)-1

    while low <= high:

        mid = (low+high)//2

        if li[mid] == val:

            return mid

        elif li[mid] > val:

            high = mid-1

        else:

            low = mid+1

    else:

        return None

 

递归版本的二分查找

1

2

3

4

5

6

7

8

9

10

11

def bin_search_rec(data_set, value, low, high):

    if low < high:

        mid = (low + high) // 2

        if data_set[mid] == value:

            return mid

        elif data_set[mid] > value:

            return bin_search_rec(data_set, value, low, mid - 1)

        else:

            return bin_search_rec(data_set, value, mid + 1, high)

    else:

        return None

 


 

排序

速度慢的三个:

1.冒泡排序

  原理就是,列表相邻的两个数,如果前边的比后边的小,那么交换顺序,经过一次排序后,最大的数就到了列表最前面

  代码:  

1

2

3

4

5

6

7

8

def bubble_sort(li):

 

    for j in range(len(li)-1):

        for i in range(1, len(li)):

            if li[i] > li[i-1]:

                li[i], li[i-1] = li[i-1], li[i]

 

    return li

 

冒泡排序的最差情况,即每次都交互顺序的情况,时间复杂度是O(n2)

存在一个最好情况就是列表本来就是排好序的,所以可以加一个优化,加一个标志位,如果没有出现交换顺序的情况,那就直接return 

1

2

3

4

5

6

7

8

9

10

11

# 优化版本的冒泡

def bubble_sort_opt(li):

    for j in range(len(li)-1):

        flag = False

        for i in range(1, len(li)):

            if li[i] > li[i-1]:

                li[i], li[i-1] = li[i-1], li[i]

                flag = True

        if not flag:

            return li

    return li

 

2.插入排序

  原理:把列表分为有序区和无序区两个部分。最初有序区只有一个元素。然后每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。

1

2

3

4

5

6

7

8

9

def insert_sort(li):

    for i in range(1,len(li)):

        tmp = li[i]

        j = i - 1

        while j >= 0 and tmp < li[j]:    # 找到一个合适的位置插进去

            li[j+1] = li[j]

            j -= 1

        li[j+1] = tmp

    return li

 

时间复杂度是O(n2)

 

3.选择排序

  原理:遍历列表一遍,拿到最小的值放到列表第一个位置,再找到剩余列表中最小的值,放到第二个位置。。。。

1

2

3

4

5

6

7

8

9

10

def select_sort(li):

    for i in range(len(li)-1):

        min_loc = i         # 假设当前最小的值的索引就是i

        for j in range(i+1,len(li)):

            if li[j] < li[min_loc]:

                min_loc = j

        if min_loc != i:   # min_loc 值如果发生过交换,表示最小的值的下标不是i,而是min_loc

            li[i],li[min_loc] = li[min_loc],li[i]

 

    return li

 

时间复杂度是O(n2)

 

速度快的几种排序:

4.快速排序(快排)

原理:让指定的元素归位,所谓归位,就是放到他应该放的位置(左变的元素比他小,右边的元素比他大),然后对每个元素归位,就完成了排序

可以参考这个动图来理解下面的代码

代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#  归位函数

def partition(data, left, right): # 左右分别指向两端的元素

    tmp = data[left]                # 把左边第一个元素赋值给tmp,此时left指向空

    while left < right:             # 左右两个指针不重合,就继续

        while left < right and data[right] >= tmp:  # right指向的元素大于tmp,则不交换

            right -= 1                      # right 向左移动一位

        data[left] = data[right]            # 如果right指向的元素小于tmp,就放到左边现在为空的位置

        while left < right and data[left] <= tmp:   # 如果left指向的元素小于tmp,则不交换

            left += 1                       # left向右移动一位

        data[right] = data[left]            # 如果left指向的元素大于tmp,就交换到右边

    data[left] = tmp            # 最后把最开始拿出来的那个值,放到左右重合的那个位置

    return left                 # 最后返回这个位置

 

#  写好归位函数后,就可以递归调用这个函数,实现排序

def quick_sort(data, left, right):

    if left < right:

        mid = partition(data, left, right)  # 找到指定元素的位置

        quick_sort(data, left, mid - 1)     # 对左边元素排序

        quick_sort(data, mid + 1, right)    # 对右边元素排序

    return data

 

正常的情况,快排的复杂度是O(nlogn)

快排存在一个最坏情况,就是每次归位,都不能把列表分成两部分,此时复杂度就是O(n2)了,如果要避免设计成这种最坏情况,可以在取第一个数的时候不要取第一个了,而是取一个列表中的随机数

 

5.归并排序

原理:列表分成两段有序,然后分解成每个元素后,再合并成一个有序列表,这种操作就叫做一次归并

  应用到排序就是,把列表分成一个元素一个元素的,一个元素当然是有序的,将有序列表一个一个合并,最终合并成一个有序的列表

  

 

图示:

 

代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

def merge(li, left, mid, right):

    # 一次归并过程,把从mid分开的两个有序列表合并成一个有序列表

    i = left

    j = mid + 1

    ltmp = []

    # 两个列表的元素依次比较,按从大到小的顺序放到一个临时的空列表中

    while i <= mid and j <= right:

        if li[i] < li[j]:

            ltmp.append(li[i])

            i += 1

        else:

            ltmp.append(li[j])

            j += 1

 

    # 如果两个列表并不是平均分的,就会存在有元素没有加入到临时列表的情况,所以再判断一下

    while i<= mid:

        ltmp.append(li[i])

        i += 1

    while j <= right:

        ltmp.append(li[j])

        j += 1

    li[left:right+1] = ltmp

    return li

 

 

def _merge_sort(li, left, right):

    # 细分到一个列表中只有一个元素的情况,对每一次都调用merge函数变成有序的列表

    if left < right:

        mid = (left+right)//2

        _merge_sort(li, left, mid)

        _merge_sort(li, mid+1, right)

        merge(li, left, mid, right)

    return li

 

def merge_sort(li):

    return(_merge_sort(li, 0, len(li)-1))

 

照例,时间复杂度是O(nlogn)

特殊的,归并排序还有一个O(n)的空间复杂度

 

6.堆排序

把这个放到最后,是因为这个是最麻烦的,把最麻烦的放到最后,是一种对工作负责的表现

如果要说堆排序,首先得先把‘树’搞明白

树

树是一种数据结构;

树是由n个节点组成的集合; -->如果n为0,那这是一颗空树,如果n>0,那么那存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树。

一些可能会用到的概念:

  根节点:树的第一个节点,没有父节点的节点

  叶子节点:不带分叉的节点

  树的深度(高度):就是分了多少层

  孩子节点、父节点:节点与节点之间的关系

图示:

 

二叉树

然后在树的基础上,有一个二叉树,二叉树就是每个节点最多有两个子节点的树结构,比如这个:

 

满二叉树:除了叶子节点,所有节点都有两个孩子,并且所有叶子节点深度都一样

完全二叉树:是有满二叉树引申而来,假设二叉树深度为k,那么除了第k层,之前的每一层的节点数都达到最大,即没有空的位置,而且第k层的子节点也都集中在左子树上(顺序)

 

 

二叉树的存储方式

有链式存储和顺序存储的方式(列表),本篇只讨论顺序存储的方式

思考:

  父节点和左孩子节点的编号下标有什么关系?    0-1 1-3 2-5 3-7 4-9         i  ---->   2i+1

  父节点和右孩子节点的编号下标有什么关系?    0-2 1-4 2-6 3-8 4-10  i  ----->  2i+2

 

再来了解下堆,堆说起来又麻烦了,我将在另一篇博客中单独写堆,栈等这些数据结构,本篇先讨论与排序有关的东西

堆

堆是一类特殊的树,要求父节点大于或小于所有的子节点

大根堆:一棵完全二叉树,满足任一节点都比其孩子节点大    ,升序用大根堆

小根堆:一棵完全二叉树,满足任一节点都比其孩子节点小

 

 

堆的调整:当根节点的左右子树都是堆时,可以通过一次向下的调整来将其变换成一个堆。

所谓一次向下调整,就是说把堆顶的值,向下找一个合适的位置,是一次一次的找,跟他交换位置的值,也要找到一个合适的位置

    “浏览器写的没保存,丢失了,所以这块不想再写了。。。”

 

堆排序的过程

  1.构造堆

  2.得到堆顶元素,就是最大的元素

  3.去掉堆顶,将堆的最后一个元素放到堆顶,此时可以通过一次调整重新使堆有序

  4.堆顶元素为第二大元素

  5.重复步骤3,直到堆为空

 

其中构造堆的过程:

 

 

挨个出数的过程:

代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

def sift(li, left, right):  # left和right 表示了元素的范围,是根节点到右节点的范围,然后比较根和两个孩子的大小,把大的放到堆顶

                                    # 和两个孩子的大小没关系,因为我们只需要拿堆顶的元素就行了

    # 构造堆

    i = left        # 当作根节点

    j = 2 * i + 1   # 上面提到过的父节点与左子树根节点的编号下标的关系

    tmp = li[left]

    while j <= right:

        if j+1 <= right and li[j] < li[j+1]:    # 找到两个孩子中比较大的那个

            j = j + 1

        if tmp < li[j]:     # 如果孩子中比较大的那个比根节点大,就交换

            li[i] = li[j]

            i = j           # 把交换了的那个节点当作根节点,循环上面的操作

            j = 2 * i + 1

        else:            

            break

    li[i] = tmp             # 如果上面发生交换,现在的i就是最后一层符合条件(不用换)的根节点,

 

def heap_sort(li):

    n = len(li)

    for i in range(n//2-1, -1, -1):  # 建立堆        n//2-1 是为了拿到最后一个子树的根节点的编号,然后往前走,最后走到根节点0//2 -1 = -1

        sift(li, i, n-1)                # 固定的把最后一个值的位置当作right,因为right只是为了判断递归不要超出当前树,所以最后一个值可以满足

                                                    # 如果每遍历一个树,就找到它的右孩子,太麻烦了

    for i in range(n-1, -1, -1):    # 挨个出数

        li[0], li[i] = li[i],li[0]      # 把堆顶与最后一个数交换,为了节省空间,否则还可以新建一个列表,把堆顶(最大数)放到新列表中

        sift(li, 0, i-1)            # 此时的列表,应该排除最后一个已经排好序的,放置最大值的位置,所以i-1

 

时间复杂度也是O(nlogn)

来扩展一下,如果要取一个列表的top10,就是取列表的前十大的数,怎么做?

可以用堆来实现,取堆的前十个数,构造成一个小根堆,然后依次遍历列表后面的数,如果比堆顶小,则忽略,如果比堆顶大,则将堆顶替换成改元素,然后进行一次向下调整,最终这个小根堆就是top10

其实Python自带一个heapq模块,就是帮我们对堆进行操作的

heapq模块

队列中的每个元素都有优先级,优先级最高的元素优先得到服务(操作),这就是优先队列,而优先队列通常用堆来实现

如果用heapq模块来实现堆排序,就简单多了:

import heapq
def heapq_sort(li):
    h = []
    for value in li:
        heapq.heappush(h,value)
    return [heapq.heappop(h) for i in range(len(h))]


 

 

而想取top10 ,直接一个方法就行了

heapq.nlargest(10,li)

 

这三种速度快的排序方式就说完了,其中,快排是速度最快的,即使这样,也不如Python自带的sort快

再来介绍两种排序,希尔排序和计数排序

7.希尔排序

希尔排序是一种分组插入排序的算法  

思路:

  首先取一个整数d1=n/2,将元素分为d1个组,每组相邻量元素之间距离为d1,在各组内进行直接插入排序;

  取第二个整数d2=d1/2,重复上述分组排序过程,直到di=1,即所有元素在同一组内进行直接插入排序。

希尔排序每趟并不使某些元素有序,而是使整体数据越来越接近有序;最后一趟排序使得所有数据有序。

 

图示:

  

代码:

1

2

3

4

5

6

7

8

9

10

11

12

def shell_sort(li):

    gap = int(len(li)//2)   # 初始把列表分成 gap个组,但是每组最多就两个元素,第一组可能有三个元素

    while gap >0:

        for i in range(gap,len(li)):

            tmp = li[i]

            j = i - gap

            while j>0 and tmp<li[j]:    # 对每一组的每一个数,都和他前面的那个数比较,小的在前面

                li[j+gap] = li[j]

                j -= gap

            li[j+gap] = tmp

        gap = int(gap//2)    # Python3中地板除也是float类型

    return li

   通过diamante也能看出来,其实希尔排序和插入排序是非常相像的,插入排序就可以看做是固定间隔为1的希尔排序,希尔排序就是把插入排序分了个组,同一个组内,相邻两个数之间不是相差1,而是相差gap

时间复杂度:O((1+t)n),其中t是个大于0小于1的数,取决于gap的取法,当gap=len(li)//2的时候,t大约等于0.3

 

8.计数排序

需求:有一个列表,列表中的数都在0到100之间(整数),列表长度大约是100万,设计算法在O(n)时间复杂度内将列表进行排序

分析:列表长度很大,但是数据量很少,会有大量的重复数据。可以考虑对这100个数进行排序

代码:

1

2

3

4

5

6

7

8

9

10

def count_sort(li):

    count = [0 for i in range(101)]  # 根据原题,0-100的整数

    for i in li:

        count[i] += 1

 

    i = 0

    for num,m in enumerate(count):  # enumerate函数将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

        for j in range(m):

            li[i] = num

            i += 1

 

1

2

 此文摘抄来自    http://www.cnblogs.com/zhang-can/p/8011002.html   

抄过来的目的是为了学习,并不是炫耀什么的,不喜勿喷,谢谢

鸿蒙应用发布实战:应用热更新的实现 在移动应用开发领域,应用更新是持续交付价值的关键环节。传统的应用更新方式需要用户手动下载完整安装包,不仅用户体验差,而且更新率往往不理想。热更新技术(也称为OTA更新)允许应用在不重新安装的情况下动态更新部分功能,极大提升了用户体验和迭代效率。本文专注于鸿蒙操作系统下的应用热更新实现方案,涵盖从原理到实践的完整知识体系。鸿蒙热更新的技术架构差分更新算法实现动态部署机制实际项目中的最佳实践安全与性能优化策略首先介绍鸿蒙热更新的背景和核心概念深入分析技术原理和算法实现。 阅读详情

相关推荐

FreeModbus从入门到实战:手把手教你用STM32实现工业级Modbus RTU通信

本文详细介绍了如何使用STM32和FreeModbus实现工业级Modbus RTU通信,涵盖硬件搭建、协议栈移植及优化技巧。重点解析了FreeModbus的移植过程,包括串口驱动适配、定时器配置和工业级稳定性优化,为开发者提供了一套完整的工业通信解决方案。

weixin_33737774的博客 348

python 常用算法学习(1)

算法就是为了解决某一个问题而采取的具体有效的操作步骤 算法的复杂度,表示代码的运行效率,用一个大写的O加括号来表示,比如O(1),O(n) 认为算法的复杂度是渐进的,即对于一个大小为n的输入,如果他的运算时间为n3+5n+9,那么他的渐进时间复杂度是n3 递归 递归就是在函数中调用本身,大多数情况下,这会给计算机增加压力,但是有时又很有用,比如下面的例子: 汉诺塔游戏 把A柱的盘子...

weixin_30415113的博客 209

CTF全能工具箱ProV2:集成AI与94GB离线资源库,打造无网环境下的智能解题流水线

CTF全能工具箱ProV2是一款专为线下CTF比赛设计的All-in-One离线解决方案。它集成了94GB的庞大离线资源库,涵盖Web、逆向、Pwn等全方向工具链与知识库,并创新性地内置了本地AI大模型,可在断网环境下提供智能解题辅助,实现从信息收集到漏洞利用的智能流水线作业,极大提升比赛效率。

weixin_29240343的博客 422

基于CYK+PCFG的短语结构句法分析

1 概述 句法分析是自然语言处理中的关键技术之一。其基本任务是确定句子的句法结构(syntatic structure)或句子中词汇之间的依存关系。形式语法理论的目的是试图用精确的数学模型(形式语言)来刻划自然语言。句法分析根据形式语法的不同可以分为基于短语结构语法的句法分析和基于依存关系语法的依存句法分析。本篇文章将介绍使用CKY(一种自底向上的动态规划算法)+PCFG(概率上下文无关文法)的基...

Chase1998的博客 1万+

STM32L476低功耗实战:LPTIM精准定时唤醒STOP2模式与系统级功耗优化

本文深入探讨了STM32L476低功耗实战技巧,重点解析了LPTIM精准定时唤醒STOP2模式的配置与优化。通过详细的步骤指南和实战经验分享,帮助开发者实现系统级功耗优化,特别适合电池供电设备开发。文章涵盖LPTIM1定时器配置、STOP2模式进入流程及常见问题排查,助力将整机功耗降至8.2uA级别。

weixin_33686714的博客 435

Unity 热更新技术 |(六)xLua框架学习最新系列完整教程

开始学习热更新方面系列知识,就从这一篇开始吧! 本系列教程 会从热更新基本概念出发,详细介绍热更新相关的全套知识点。 如热更新技术基本原理、热更新主流方案、AssetBundle系列教程、Lua语言编程、Lua与Unity交互教程、Xlua框架使用、热更新实战教程等方面。 热更新作为一个开发者必备技能,如果想学习的话,可以从现在开始了哦~ 接下来先从XLua学习使用 开始学习吧!

努力前行,总会成为自己心中的那道光 1万+

python 的sort()函数详解

python 的sort()函数详解

qq_20831401的博客 16万+

高通平台WIFI学习-- WCN7851 三频 2X2 MIMO DBS HBS Wi-Fi 7介绍

WCN7851是支持Wi-Fi 7和蓝牙5.4的三频SoC芯片,具有以下核心特性:采用NSP334封装,支持2.4GHz/5GHz/6GHz三频段并发操作,最高速率达5.8Gbps;集成MU-MIMO、4096QAM调制技术,6GHz频段支持320MHz带宽;提供PCIe Gen3接口和低功耗设计,兼容多种无线标准。电气特性包括1.8V/1.2V可编程GPIO、76.8MHz时钟源要求,以及详细的射频性能参数。该芯片通过多链路操作和动态频率选择等先进功能,实现高性能无线连接。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 1275

Python 列表 sort()函数使用理解

首先我们要知道sort() 可以对列表进行「排序」语法参数返回值返回None,同时将原列表排序。也就是没有返回值案例:将列表中的元素排序。

Echo_3wdiankang的博客 2万+

GameFramework 框架详解之 Network网络模块 工具链

GameFramework(下面简称GF)Demo中,已经给我们提供了Network模块使用的protobuf使用的动态链接库protobuf-net.dll,但是GF并没有给我们提供protobuf相关的工具链,比如:1.proto文件自动导出对应c#的Packet类和PacketHandler类2.导出Packet类继承IReference以便使用引用池。3.自动生成Packet类和PacketHandler的Id,且保持和服务器Id一一对应。

TxNet 2902

23 RAG 为什么答不准:召回、分块、排序的常见坑

RAG 答不准时,不要先怪模型。本文把常见失败拆成召回不到、召回不准、分块不完整、排序靠后、上下文污染和生成不忠实六类,并给出从 Top-K 检查到评估集的排查流程。

老于的笔记的专栏 245

Python 列表 sort()函数使用详解

sort() 可以对列表进行「排序」

wangyuxiang946的博客 7万+

LPDDR6 Efficiency Mode 技术探讨

LPDDR6 Efficiency Mode 技术探讨

zilan23的博客 1158

Python 中的排序工具:sort 与 sorted 详解

Python 中的排序工具:sort 与 sorted 详解 文章目录Python 中的排序工具:sort 与 sorted 详解0. 参考资料1. 排序基础 0. 参考资料 Sorting HOW TO 1. 排序基础 Python 中提供了两种排序工具: list.sort() 方法,它会在原地修改列表。 sorted() 内置函数,从可迭代对象生成一个新的排序后的列表。 最基本...

团子大圆帅的博客 1586

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python中排序的函数_Python中排序常用到的sort 、sorted和argsort函数

转载自:https://blog.youkuaiyun.com/u013731339/article/details/41449177Python中sort 和 sorted函数一、介绍sort函数是list列表中的函数,而sorted可以对list或者iterator进行排序二、sort和sorted的比较【默认从小到大排序】1、用sort函数对列表排序时会影响列表本身,而sorted不会sort()是i...

weixin_39622980的博客 258

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python - sort排序函数

在此顺便记录一下python中list的排序函数sort。 sort函数原形如下: sorted(data, cmp=None, key=None, reverse=False) 其中,data是待排序数据,可以使List或者iterator, cmp和key都是函数,这两个函数作用与data的元素上产生一个结果,sorted方法根据这个结果来排序。  cmp(e1, e2) 是带两个

不要说话的博客 1023

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python-sort()/sorted()比较

Sorting Lists sorted(iterable,key=None,reverse=False),does not mutate list, must assign result to a variable(返回新的列表,对所有可迭代的对象均有效) sort(key=None,reverse=False)。mutates the list,returns nothing(改变列...

weixin_30929295的博客 64

python中的sort、sorted排序

我们通常会遇到对数据库中的数据进行排序的问题,今天学习一下对列表和字典的排序方法。 列表 第一种:内建方法sort sort()对列表排序是永久性的排序。 用法:sort(*,key=None,reverse=False) 注意这个reverse。当reverse为True时,代表反向排列;默认为False,正向排列。 举例: 1 >>> d...

weixin_33814685的博客 295

python排序函数sort()与sorted()区别

python排序函数sort()与sorted()区别 sort是容器的函数:sort(cmp=None, key=None, reverse=False) sorted是python的内建函数:sorted(iterable, cmp=None, key=None, reverse=False) 参数解析: cmp:比较函数,比较什么参数由key决定。例如:cmp(e1, e2) 是具有...

可乐联盟 348

python的sort()函数详解

让sort()函数按我们想要的排列方式进行排列。

robinson_的博客 12万+

Python之sort函数

描述:sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。 语法: list.sort( key=None, reverse=False) key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse -- 排序规则,reverse = True降序,reverse = False升序(默认)。 (无返回值,只会对列表进行排序) 实例: #!/usr/bin/pyt...

一只不想做程序员的程序猿的日常摸鱼分享 3万+

Python中的sort方法、sorted函数与lambda表达式

Python中的排序方法总结: sort()方法:原地修改列表,返回None,支持key和reverse参数。key参数用于自定义排序逻辑(如按长度、属性等),reverse控制升降序。 sorted()函数:适用于任何可迭代对象,返回新列表,不修改原数据。功能与sort()类似,但应用更广泛。 lambda函数:常用于排序场景,如sorted(items, key=lambda x: x[1])实现按元组第二元素排序,支持多级排序(返回排序键元组)。

matlabxiao1的博客 3849

Python中sort()与sorted()函数详解:如何选择与使用

在Python中,对数据进行排序是常见的操作。sort()和sorted()是两个核心的排序工具,本文将深入解析两者的区别,并通过实用示例帮助你彻底掌握它们的正确使用场景。

2501_90618844的博客 3722

Python中的sort和lambda函数

一、sort在Python中存在两种形式,分别是sorted(str),另一种是list.srot() sorted()函数是Python的内置函数,具体形式为sorted(iterable, cmp=None, key=None, reverse=False),其中iterable是可迭代对象,包括列表、元组、字典、字符串;cmp代表比较函数;key代表迭代对象中的某个属性,如某个元素的下标;reverse代表升序或者降序 例如: students = [(‘john’, ‘A’, 15), (‘jan

竹狼的博客 4万+

python中sort()函数的详细使用方法

如果函数很复杂时可以分开写,不用匿名函数,只需要先定义比较函数,然后让key=比较函数即可,注意key=函数名称,函数名称不用加()例如按照字符串的长度来排序,len函数用于求字符串的长度,是系统自带的print(L)结果自己定义一个比较函数fun,要求按照数的绝对值进行升序排序print(L)结果先定义比较函数fun用于求绝对值,然后将fun函数传给了key参数,sort方法会遍历列表,将每一个遍历到的元素传入fun函数作为形参x,而fun函数的返回值将作为对应列表元素的排序规则。

m0_62574258的博客 1万+

Python中的sort()和sorted()用法

Python提供了两种排序方法:list.sort()和sorted()。两种排序分别如何使用?它们的原理又是什么?

记录应用与学习笔记,Python、算法、工具、踩坑... 3343
上一篇: springboot yml 常量
下一篇: springcloud集成其它语言
dylanstudy
博客等级 码龄14年 19粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值