精华内容
下载资源
问答
  • pythonsort()函数
    2021-01-12 09:01:00

    不知道大家在做项目时候,有没有遇到这个函数,记得小编第一次看到这个函数,一直纳闷这个函数的使用方法,而后查询了下,今日,小编再一次遇到这个函数,于是,就做了一番整理,内容请看下文。

    与sort()函数相对应的必须要提到sorted()函数啦~结合着两个函数跟大家叙述。

    (1)使用范围不一样

    只有当对象是列表时,才能调用sort()方法,而sorted()是全局函数,可作用于所有可迭代对象。

    (2)返回结果不一样

    因为sort()是列表的自带方法,所以当列表调用此方法时,会改变自身的值,且返回值为None。而sorted()不会改变原有对象的值,会返回一个新对象。

    结合以上两点,来看具体例子:# 列表可以调用sort()方法,并会改变自身的值,返回值为None

    a = [1, 5, 7, 3, 4]

    a.sort()

    print(a)  # [1, 3, 4, 5, 7]

    b = a.sort()

    print(b)  # None

    # 元组不支持sort()方法

    c = (1, 5, 7, 3, 4)

    c.sort()

    print(c)  # AttributeError: 'tuple' object has no attribute 'sort'

    # sorted()函数可以作用于元组,并不改变原有元组的值,且返回排完序后的新列表

    c = (1, 5, 7, 3, 4)

    d = sorted(c)

    print(c)  # (1, 5, 7, 3, 4)

    print(d)  # [1, 3, 4, 5, 7]

    所以当我们需要保留原有的列表时,那就应该使用sorted()函数,否则就用列表自身的sort()方法,因为sort()方法不需要复制原有的列表,会消耗较少内存。

    想必以上内容,大家可以足够了解到这个函数了吧,另外也让大家掌握另一个函数的使用技巧了呢,好了,大家可以实际应用起来啦~

    更多相关内容
  • Python sort 函数

    千次阅读 2021-07-02 00:47:18
    1. sort 函数 函数原型: L.sort(*, key=None, reverse=None) 它把 L 原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序! 参数说明: argument description * 迭代类型的数据...

    1. sort 函数

    函数原型:

    L.sort(*, key=None, reverse=None)
    

    它把 L 原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序!

    参数说明:

    argumentdescription
    *迭代类型的数据列表
    key函数类型,比较的原则
    reverse为 True 时逆序

    Both list.sort() and sorted() have a key parameter to specify a function (or other callable) to be called on each list element prior to making comparisons.



    2. 排序方法

    2.1 自定义数据类型

    首先定义一个 Student 类,每一个对象有学号 num 和名字 name 两个属性,对 Student 列表元素排序

    class Student:

    class Student:
    	def __init__(self, num, name):
    		self.num = num
    		self.name = name
    
    	def __str__(self):
    		return f'{self.num} - {self.name}'
    

    List:

    students = [
    	Student(5, 'Tom'),
    	Student(2, 'Tony'),
    	Student(6, 'Lucy'),
    	Student(1, 'Jerry')
    ]
    

    2.2 compare 函数有 1 个参数

    key 接受的函数类型要求 函数只有一个参数,默认按返回值的升序对列表元素排序:

    cmp2 = lambda stud: stud.num
    students.sort(key=cmp2, reverse=False)
    for student in students:
    	print(student)
    

    结果如下:

    1 - Jerry
    2 - Tony
    5 - Tom
    6 - Lucy
    

    2.3 compare 函数有 2 个参数

    当比较函数有 2 个参数时,如:

    def mycmp(stud1, stud2):
    	''' return true when num is greater'''
    	return stud1.num - stud2.num
    

    此时需要用到 functools.cmp_to_key():

    from functools import cmp_to_key
    
    cmp1 = lambda stud1, stud2: stud1.num - stud2.num
    students.sort(key=cmp_to_key(cmp1))
    for student in students:
    	print(student)
    

    结果如下:

    1 - Jerry
    2 - Tony
    5 - Tom
    6 - Lucy
    

    3. 拓展

    类似的,max 函数也有参数 key:

    a = [('x', 5), ('y', 3), ('z', 8)]
    print(max(a, key=lambda x: x[-1]))  # ('z', 8)
    

    完结 🍻

    展开全文
  • python sort函数原理

    千次阅读 2021-03-17 02:22:15
    python sort()用法一个字典 adic = {1:98,2:12,3:78} 对这个排序: alist= [] for i in adPython中的sort()方法用于数组排序,下面以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行...

    python sort()用法

    一个字典 adic = {1:98,2:12,3:78} 对这个排序: alist= [] for i in adPython中的sort()方法用于数组排序,下面以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 x = [4, 6, 2, 1, 7, 9]x.sort()prin

    python中,sort函数是按照什么方式排序的?sorted...a.sort是对a进行排序,返回None,sorted(a)返回一个排好序的副本,a不变。请多看看相关教程。

    cc7b0aa2c59d691d4a392c2d876fe06b.png

    关于python里sort的疑问

    在网上看到这么几段代码,有些疑惑。 >>> a=range(10) >>> b=a[::-1] >>例1 c是一个list,list中的每一个元素都是一个tuple,如c[0]=(0,9), c[1]=(1,8) key的作用是指定待排序list(此处即C)中的元素中用来作为排序依据的属性 上例中的key为匿名方法,分别以c[i][0], 和 c[i][1] 作为排序依据。

    python3没有了Cmp函数,自定义的排序sort方法不是那关键字参数key和reverse还在吗?我是python3.3.5的。

    自定义排序用key关键字 >>> a=['abc','abcd','ab'] >>> a.sort(key=len) #使用len函数返回的大小排序 >>> a ['ab', 'abc', 'abcd'] key和reverse是有的。

    python的一个sort函数不知道哪里错了。

    Python初级 sort以及数组和函数的用法

    就想知道key=lo, 为什么lo没有参数, 还有为什么是按照输出结果的那种排>>>为什么不用参数? pairs.sort(key=lo) 是将整个pairs迭代后每一次迭代的值都会传入lo. >>>为什么是按照输出结果的那种排序方式 lo函数返回的pair[1],也就是在迭代pairs是传入的(1,“one”)中的"one" 所以按照字母顺序排序的。

    python中,sort()函数用来排序,但是如果被排的...例如对1,3,'a'排序

    1,3,a 主要根据asc码排序,1和3属于int类型,a属于str类型,i的asc码在s前面,所以先排数字,然后1排在3前面没有什么疑问了吧。

    用python语言实现matlab中的sort函数功能

    matlab中的sort函数[Y,I]=sort(A),返回的Y矩阵是排序结果、I矩阵是排序A是要排序的矩阵,1是维度,就是说是按列排序还是按行排序,1是按列排序,'descend'是降序排列。

    python怎么使用sort

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 x = [4, 6, 2, 1, 7, 9] x.sort() pr

    请教如何用python按字母顺序排序英文名字但是不可代码如下: list = ['banana', 'apple', 'orange', 'blueberry', 'watermelon', 'strawberry', 'mango'] print(list) list.sort() #根据字母顺序排序 print(list) #['apple', 'banana', 'blueberry', 'mango', 'orange', 'strawberry', 'waterme

    展开全文
  • python sort函数内部实现原理

    千次阅读 2020-11-05 20:33:24
    目录 引言 sort 与 sorted 内部实现原理的回答 Timsort 1 操作 2 性能 ... 前不久在这篇文章sort与sorted的区别中收到了这样的一个提问:“pythonsort 内部实现机制是什么?时间复杂度是多...

    目录

     

    正文

    回到顶部

    引言

            前不久在这篇文章 sort与sorted的区别  中收到了这样的一个提问:“python的 sort 内部实现机制是什么?时间复杂度是多少 ”。
    几番Google之后有了以下的回答:

    内部实现机制为:Timesort

    最坏时间复杂度为:O(n log n)

    空间复杂度为:O(n)

    回到顶部

    sort 与 sorted 内部实现原理的回答

            1. (知乎)python sort 函数采用的排序算法 :其中一个回答提到了 python 中的 sorted 排序内部实现是 timsort,并没有说 sort 。

            2. (GitHub)python的sorted排序分析 : 同样只提到了 python 中的 sorted 排序内部实现是 timsort,并没有说 sort (知乎回答的一个链接)。

            3. (CSDN)C++,java,Python的内部实现sort怎么实现的 :内容提到 python内部的sort采用的是混合(hybrid)排序,规模小的时候采用 binary insertion,规模大的时候采用 sample sort 。

            4. (流畅的python)list.sort 方法和 sorted 函数 : 注7 中提到 python的排序算法——Timesort——是稳定的,意思是就算两个元素比不出大小,在每次排序的结果里他们的相对位置是固定的。

            以上大量回答都指向Timsort,那么就继续Google看看这是个啥东西

    回到顶部

     Timsort

    翻译自 维基百科Timesort 

        Timsort是结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法,它在现实中有很好的效率。Tim Peters在2002年设计了该算法并在Python中使用(TimSort 是 Python 中 list.sort 的默认实现)。该算法找到数据中已经排好序的块-分区,每一个分区叫一个run,然后按规则合并这些run。Pyhton自从2.3版以来一直采用Timsort算法排序,现在Java SE7和Android也采用Timsort算法对数组排序。

    1 操作

       1.1 run的最小长度

       1.2 优化run的长度

       1.3 合并run

       1.4 合并步骤

        1.5 Galloping模型

    2 性能 

    Timsort的核心过程

           TimSort 算法为了减少对升序部分的回溯和对降序部分的性能倒退,将输入按其升序和降序特点进行了分区。排序的输入的单位不是一个个单独的数字,而是一个个的块-分区。其中每一个分区叫一个run。针对这些 run 序列,每次拿一个 run 出来按规则进行合并。每次合并会将两个 run合并成一个 run。合并的结果保存到栈中。合并直到消耗掉所有的 run,这时将栈上剩余的 run合并到只剩一个 run 为止。这时这个仅剩的 run 便是排好序的结果。

    综上述过程,Timsort算法的过程包括

    (0)如何数组长度小于某个值,直接用二分插入排序算法

    (1)找到各个run,并入栈

    (2)按规则合并run

    回到顶部

    1 操作

         现实中的大多数据通常是有部分已经排好序的,Timsort利用了这一特点。Timsort排序的输入的单位不是一个个单独的数字,而是一个个的分区。其中每一个分区叫一个“run“(图1)。针对这个 run 序列,每次拿一个 run 出来进行归并。每次归并会将两个 run 合并成一个 run。每个run最少要有2个元素。Timesor按照升序和降序划分出各个run:run如果是是升序的,那么run中的后一元素要大于或等于前一元素(a[lo] <= a[lo + 1] <= a[lo + 2] <= ...);如果run是严格降序的,即run中的前一元素大于后一元素(a[lo] >  a[lo + 1] >  a[lo + 2] >  ...),需要将run 中的元素翻转(这里注意降序的部分必须是“严格”降序才能进行翻转。因为 TimSort 的一个重要目标是保持稳定性stability。如果在 >= 的情况下进行翻转这个算法就不再是 stable)。

    1.1 run的最小长度

        run是已经排好序的一块分区。run可能会有不同的长度,Timesort根据run的长度来选择排序的策略。例如如果run的长度小于某一个值,则会选择插入排序算法来排序。run的最小长度(minrun)取决于数组的大小。当数组元素少于64个时,那么run的最小长度便是数组的长度,这是Timsort用插入排序算法来排序。当数组元素大于等于63时,For larger arrays, a number, referred to as minrun, is chosen from the range 32 to 65, such that the size of the array, divided by the minimum run size, is equal to, or slightly smaller than, a power of two. The final algorithm for this simply takes the six most significant bits of the size of the array, adds one if any of the remaining bits are set, and uses that result as the minrun. This algorithm works for all cases, including the one in which the size of the array is smaller than 64.

     

    图1 run

    1.2  优化run的长度

           优化run的长度是指当run的长度小于minrun时,为了使这样的run的长度达到minrun的长度,会从数组中选择合适的元素插入run中。这样做使大部分的run的长度达到均衡,有助于后面run的合并操作。

    1.3 合并run

           划分run和优化run长度以后,然后就是对各个run进行合并。合并run的原则是 run合并的技术要保证有最高的效率。当Timsort算法找到一个run时,会将该run在数组中的起始位置和run的长度放入栈中,然后根据先前放入栈中的run决定是否该合并run。Timsort不会合并在栈中不连续的run(Timsort does not merge non-consecutive runs because doing this would cause the element common to all three runs to become out of order with respect to the middle run.)

    Timsort会合并在栈中2个连续的run。X、Y、Z代表栈最上方的3个run的长度(图2),当同时不满足下面2个条件是,X、Y这两个run会被合并,直到同时满足下面2个条件,则合并结束:

    (1) X>Y+Z

    (2) Y>Z

    例如:如果X<Y+Z,那么X+Y合并为一个新的run,然后入栈。重复上述步骤,直到同时满足上述2个条件。当合并结束后,Timsort会继续找下一run,然后找到以后入栈,重复上述步骤,及每次run入栈都会检查是否需要合并2个run。

     

    图2 合并run

     1.4 合并run步骤

           合并2个相邻的run需要临时存储空闲,临时存储空间的大小是2个run中较小的run的大小。Timsort算法先将较小的run复制到这个临时存储空间,然后用原先存储这2个run的空间来存储合并后的run(图3)。

     

    图3 临时存储空间

              简单的合并算法是用简单插入算法,依次从左到右或从右到左比较,然后合并2个run。为了提高效率,Timsort用二分插入算法(binary merge sort)。先用二分查找算法/折半查找算法(binary search)找到插入的位置,然后在插入。
             例如,我们要将A和B这2个run 合并,且A是较小的run。因为A和B已经分别是排好序的,二分查找会找到B的第一个元素在A中何处插入(图4)。同样,A的最后一个元素找到在B的何处插入,找到以后,B在这个元素之后的元素就不需要比较了(图5)。这种查找可能在随机数中效率不会很高,但是在其他情况下有很高的效率。

     

    图4 run合并过程1

     

    图5 run合并过程2

    1.5 Galloping 模型

            介绍的是类似上述run的合并过程,参见维基百科 Galloping Model

    回到顶部

    2 性能

         根据信息学理论,在平均情况下,比较排序不会比O(n log n)更快。由于Timsort算法利用了现实中大多数数据中会有一些排好序的区,所以Timsort会比
    O(n log n)快些。对于随机数没有可以利用的排好序的区,Timsort时间复杂度会是log(n!)。

    Timsort与其他比较排序算法时间复杂度(time complexity)的比较。

    空间复杂度(space complexities)比较

    说明:

            JSE 7对对象进行排序,没有采用快速排序,是因为快速排序是不稳定的,而Timsort是稳定的。

            下面是JSE7 中Timsort实现代码中的一段话,可以很好的说明Timsort的优势:

             A stable, adaptive, iterative mergesort that requires far fewer than n lg(n) comparisons when running on partially sorted arrays, while offering performance comparable to a traditional mergesort when run on random arrays.  Like all proper mergesorts, this sort is stable and runs O(n log n) time (worst case).  In the worst case, this sort requires temporary storage space for n/2 object  references; in the best case,  it requires only a small constant amount of space.

            大体是说,Timsort是稳定的算法,当待排序的数组中已经有排序好的数,它的时间复杂度会小于n logn。与其他合并排序一样,Timesrot是稳定的排序算法,最坏时间复杂度是O(n log n)。在最坏情况下,Timsort算法需要的临时空间是n/2,在最好情况下,它只需要一个很小的临时存储空间

    回到顶部

    博客搬运地点

    展开全文
  • 一、sort函数 sort函数默认按从小到大的顺序排列 ———————————————— sort()函数原型: list.sort(key=None, reverse=False)、 (1) key参数 key接受的是一个只有一个形参的函数,形式如下 def f(a): ...
  • Python sort函数

    2022-04-01 21:21:48
    sort函数默认是按照从小到大的顺序排列 sort(key,reverse)中key接受的是函数的返回值,表示该元素的权值,sort按照权值大小进行排序,reverse是一个bool类型的值,表示是否颠倒排列顺序,一般默认为False 2.cmp ...
  • 今天做力扣T937.重新排列日志文件,看见官解的sort使用key关键字很...注:python sort函数的排序是稳定的 #构建排序函数 f = lambda x: (0,x) if type(x)==type(0) else (1,) 上述函数意为当x的类型是数字型时,返回(0,
  • Python 列表sort函数

    千次阅读 2021-04-26 21:07:21
    Python和Java等编程语言一样,提供了一种自动排序的方法,Java中是Arrays.sort()方法,而Python中是sort()方法,下面来详细介绍一下sort()方法的用法 一、语法 iterable.sort(cmp[, key[, reverse]]) 参数解释: ...
  • 1. sort函数可以对列表进行排序,并改变原列表的内容 2. sored 函数返回一个新的列表
  • 小编典典sort和的参数sorted双方sort并sorted有三个关键字参数:cmp,key和reverse。L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;cmp(x, y) -> -1, 0, 1sorted(iterable, cmp=None, ...
  • pythonsort()函数详解

    万次阅读 多人点赞 2021-12-01 20:11:00
    pythonsort()函数详解
  • 主要介绍了python lambda表达式在sort函数中的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • python排序函数sort()与sorted()的区别

    千次阅读 2020-12-02 15:20:09
    python 中sorted与sort有什么区别sort(cmp=None, key=None, reverse=False)sorted(iterable, cmp=None, key=None, reverse=False)sort是容器的函数,用List的成员函数sort进行排序sorted是Python的内建函数相同的...
  • [python3]sort函数自定义比较规则

    千次阅读 2022-01-21 18:37:33
    前言 在C++标准库中,有一个功能强大的sort函数,可以高效地对数组进行排序。无论是基本数据类型,还是自定义的类,都可以使用。 而在python中,也有
  • python sort函数

    万次阅读 2015-12-20 17:09:54
    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 ...
  • python sorted函数

    2021-11-17 19:52:22
    python sorted函数 用sorted函数根据字典item进行排序后,返回的是排序后的list of tuple!!! 例如: d = {"stuck":2,"traffic":5,"error_brake":3} sd = sorted(d.items(),key = lambda item:item[1],reverse = ...
  • 1、使用python内置函数sort()、sorted()a)、基础使用(默认升序)第一种: 直接调用 内建函数 sorted()方法可以快速完成升序排序。它返回一个新的list。可以接受参数reverse(False表示升序)例如:sorted([2,1,13,44,3,...
  • python sort()函数对字符串排序

    千次阅读 2021-12-27 19:21:54
    python sort()函数对字符串排序,默认是按照ASCII字符顺序排序,意味着对字母排序的时候,大写的总在前面,小写开头的在后面。想要按照普通字典顺序排序,就在sort()方法调用时,将关键字参数key设置为str.lower。 ...
  • pythonsort函数的使用

    万次阅读 多人点赞 2019-08-26 18:17:06
    我们需要对List进行排序,Python提供了两个方法 对给定的List L进行排序, 方法1.用List的成员函数sort进行排序 方法2.用内建函数sorted进行排序(从python 2.4开始)...sort函数定义:sort(cmp=None, key=None, rev...
  • 参考:Python3 List sort()方法 | 菜鸟教程 (runoob.com)
  • Python中的sort()函数

    千次阅读 2021-11-23 15:05:47
    sort(self, key=None, reverse=False) #key:是排序的条件,可以是:key=int,key=len, key=lambda.. #reverse:表示是否反序,默认从小到大,默认为Flase 例1: l = [5,2,3,1,4 ] l.sort() print(l) #输出:[1, 2,...
  • python sort()排序算法

    千次阅读 2020-12-02 15:20:14
    在刷leetcode一道要求时间复杂度的题目,用了sort排序,发现时间复杂度还可以。#python的排序详解排序,在编程中经常遇到的算法,我也在几篇文章中介绍了一些关于排序的算法。有的高级语言内置了一些排序函数。本文...
  • Python3使用sort函数自定义排序

    千次阅读 2020-12-05 21:51:08
    直接使用sort()函数 score = [78, 90, 40, 60] score.sort() print(score) ### [40, 60, 78, 90] 根据数据中的某一个项排序 students = [{"age": 18, "name": 'jack', "score": 89}, {"age": 15, "name": 'tom', ...
  • 测试手写的快速排序,最简单,无优化的版本居然比python内置函数sort慢了近100倍 import time import random def partition(arr, low, high): # 分割 i = (low - 1) # 最小元素的索引 pivot = arr[high] for j in...
  • python sort()用法

    2020-11-28 14:32:56
    展开全部Python中的sort()方法用于数组排序,下面以实例形式62616964757a686964616fe78988e69d8331333337396232对此加以详细说明:一、基本形式列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然...
  • python sort、sorted高级排序技巧

    千次阅读 2020-12-07 21:12:15
    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。1)排序基础简单的升序排序是非常容易的。只需要调用sorted()方法。它返回一个新的list,新的list的...
  • people.sort(key=lambda x:(-x[0],x[1])) # -x[0]表示降序,x[1]表示升序 输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] 输出:[[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]]

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,840
精华内容 50,736
关键字:

pythonsort()函数