精华内容
下载资源
问答
  • Python排序函数

    千次阅读 2019-07-26 11:48:05
    Python中自带了两个排序函数sort和sorted,用法分别为: sort函数用法 list.sort(cmp=None, key=None, reverse=False) 特点:对list原地排序(直接改变数组),无返回值。 参数: cmp——可选参数, 可用于...

    Python中自带了两个排序函数sort和sorted,用法分别为:

    sort函数用法

    list.sort(cmp=None, key=None, reverse=False)

    特点:对list原地排序(直接改变数组),无返回值。

    参数:

    • cmp——可选参数, 可用于自定义排序规则。
    • key ——主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    • reverse——升序or降序,reverse = True 降序, reverse = False 升序(默认)。

    sorted函数用法

    sorted(iterable[, cmp[, key[, reverse]]])

    特点:可以对所有可迭代的对象进行排序操作。返回的是一个新的 list,不修改原来的对象。

    参数:

    • iterable – 可迭代对象。
    • cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
    • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    • reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

    自定义排序规则

    这里以sorted函数为例,自定义排序规则。

    比如给定区间数组s = [[1,6],[2,3],[1,4],[3,5]],数组中的每个元素代表一个区间范围,希望的排序规则:根据区间起始点的大小进行排序,起始点小的排在前面,起始点如果相同,则终止点小的排在前面。

    1. 自定义compare函数,compare函数需要传两个参数a和b(a和b每次都是从可迭代对象里面取的,这个咱们不管),这个compare函数需要有三个返回值{-1, 0, 1},当a<b时,返回值为-1,a=b时,返回值为0,a>b时,返回值为1.

    2. python3中的sorted()函数去除了cmp参数,推荐使用key。functools.cmp_to_key() 将 compare函数 转化为 key。

    import functools
    def compare(a, b):
        if a[0] != b[0]:
            return -1 if a[0] < b[0] else 1
        else:
            if a[1] < b[1]:
                return -1
            elif a[1] > b[1]:
                return 1
            else:
                return 0
    
    s = [[1,6],[2,3],[1,4],[3,5]]
    s = sorted(s, key=functools.cmp_to_key(compare))
    print(s)  # [[1, 4], [1, 6], [2, 3], [3, 5]]
    
    #使用sort函数也是一样的用法
    # s.sort(key=functools.cmp_to_key(compare))
    # print(s)  # [[1, 4], [1, 6], [2, 3], [3, 5]]
    
    展开全文
  • python排序函数

    万次阅读 2019-03-09 11:33:34
    python 基础的排序函数 sort 、sorted 、argsort 一、sort 、sorted 1.简单升序排序直接调用sorted函数即可 sort()方法仅定义在list中 ls = list([5, 2, 3, 1, 4]) ls.sort() print ls &gt;&gt;&gt;[1, ...

    python 基础的排序函数 sort 、sorted 、argsort

    一、sort 、sorted

    1.简单升序排序直接调用sorted函数即可

    sort()方法仅定义在list中

    ls = list([5, 2, 3, 1, 4])
    ls.sort()
    print ls
    >>>[1, 2, 3, 4, 5]
    

    sorted()方法对所有的可迭代序列都有效,返回list

    l1 = ['b','c','d','b','c','a','a'] 
    sorted(set(l1),key=l1.index) 
    Out[31]: ['b', 'c', 'd', 'a']
    
    print(sorted({8: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}))
    >>>[2, 3, 4, 5, 8]
    
    

    2.sorted(iterable,cmp,key,reverse)

    (1) 使用cmp函数排序,cmp是带两个参数的比较函数

    >>>L = [('david', 90), ('mary',90), ('sara',80),('lily',95)]
    
    >>>print(sorted(L,cmp = lambda x,y: >>>cmp(x[0],y[0])))#按照第一个位置的字母序排序
    [('david', 90), ('lily', 95), ('mary', 90), ('sara', 80)]
    
    >>>print(sorted(L,cmp = lambda x,y: >>>cmp(x[1],y[1])))#按照第二个位置的数字序排序
    [('sara', 80), ('david', 90), ('mary', 90), ('lily', 95)]
    
    

    (2) 添加key参数,key 是带一个参数的函数
    list.sort()和sorted()函数使用key参数来指定一个函数,此函数将在每个元素比较前被调用。

    # 通过key指定的函数来忽略字符串的大小写
    >>>print(sorted("This is a test string from Andrew".split(), key=str.lower))
    ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
    
    # 通过key指定的函数来保持原序列顺序
    >>>l1 = ['b','c','d','b','c','a','a'] 
    >>>sorted(set(l1),key=l1.index) 
    Out[31]: ['b', 'c', 'd', 'a']
    

    (3) reverse

    >>>L = [('david', 90), ('mary',90), ('sara',80),('lily',95)]
    >>>print(sorted(L, reverse=True))  # 逆转
    [('sara', 80), ('mary', 90), ('lily', 95), ('david', 90)]
    

    二、argsort

    argsort 是 numpy 库中的函数。返回数组值从小到大的索引值。

    # 一维数组
    >>>x = np.array([5, 4, 2])
    >>>np.argsort(x)
    Out[45]: array([2, 1, 0])
    
    # 二维数组
    >>>x = np.array([[0, 3], [2, 2]])
    array([[0, 3],
           [2, 2]])
    >>>np.argsort(x, axis=0) #按列排序
    Out[48]: 
    array([[0, 1],
           [1, 0]])
    >>>np.argsort(x, axis=1) #按行排序
    Out[51]: 
    array([[0, 1],
           [0, 1]])
    
    >>> x = np.array([3, 1, 2])
    >>> np.argsort(x) #按升序排列
    array([1, 2, 0])
    >>> np.argsort(-x) #按降序排列
    array([0, 2, 1])
    >>> x[np.argsort(x)] #通过索引值排序后的数组
    array([1, 2, 3])
    >>> x[np.argsort(-x)]
    array([3, 2, 1])
    
    展开全文
  • Python 排序函数sorted

    2017-04-27 16:12:50
    Python 排序函数sorted函数原型sorted(iterable, key=None, reverse=False) * iterable 是待排序的数据结构 * key 元素评价函数 用来评价元素大小 * reverse 是否倒序 * 返回值是排好序的数据结构,不改变源数据...

    Python 排序函数sorted

    函数原型sorted(iterable, key=None, reverse=False)
    * iterable 是待排序的数据结构
    * key 元素评价函数 用来评价元素大小
    * reverse 是否倒序
    * 返回值是排好序的数据结构,不改变源数据结构

    简单列表结构

    a = [9, 8, 6, 3, 2, 1]
    result = sorted(a,reverse=True)
    print(result) #[9, 8, 6, 3, 2, 1]

    复杂列表结构

    a = [(1,9),(2,8),(3,7),(4,6),(5,0)]
    result = sorted(a,key=lambda x:x[0])#评价函数返回元素第一个值,元素大小按第一个值算
    print(result)#[(1, 9), (2, 8), (3, 7), (4, 6), (5, 0)]
    
    展开全文
  • 2016.4.14python排序函数

    千次阅读 2016-04-14 22:15:08
    2016.4.14python排序函数

    排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。

    Python内置的sorted()函数就可以对list进行排序:

    >>> sorted([36, 5, -12, 9, -21])
    [-21, -12, 5, 9, 36]
    

    此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

    >>> sorted([36, 5, -12, 9, -21], key=abs)
    [5, 9, -12, -21, 36]
    

    key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。对比原始的list和经过key=abs处理过的list:

    list = [36, 5, -12, 9, -21]
    
    keys = [36, 5,  12, 9,  21]
    

    然后sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:

    keys排序结果 => [5, 9,  12,  21, 36]
                    |  |    |    |   |
    最终结果     => [5, 9, -12, -21, 36]
    

    我们再看一个字符串排序的例子:

    >>> sorted(['bob', 'about', 'Zoo', 'Credit'])
    ['Credit', 'Zoo', 'about', 'bob']
    

    默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。

    现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能用一个key函数把字符串映射为忽略大小写排序即可。忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较

    这样,我们给sorted传入key函数,即可实现忽略大小写的排序:

    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
    ['about', 'bob', 'Credit', 'Zoo']
    

    要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True

    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
    ['Zoo', 'Credit', 'bob', 'about']
    

    从上述例子可以看出,高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。sorted()同时也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。

    ps:

    reverse

    英 [rɪ'vɜːs]
    美 [rɪ'vɝs]
    • n. 背面;相反;倒退;失败
    • adj. 反面的;颠倒的;反身的
    • vt. 颠倒;倒转
    • vi. 倒退;逆叫

    练习

    假设我们用一组tuple表示学生名字和成绩:

    L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
    

    请用sorted()对上述列表分别按名字排序:




    再按成绩从高到低排序:


    运行正确。

    在这里,我首先定义了一个列表,它里面有四个元素,每个元素都是一个元祖对象(元祖就是tuple),代码的3,4行就是告诉比较的时候用元组里的第二个值来比较。 然后,我将一个定义好的函数作为key,key作用于了L中的每一个元素,然后sorted()函数按照key(就是我们指定的函数)进行排序,并按照对应关系返回L相应的元素,默认从小到大,再加一个反向,变为从大到小。


    附上一个参考资料,讲解的很清楚:http://jingyan.baidu.com/article/90808022a546b8fd90c80f48.html


    另外,我们也可以复习一下这方面内容:Python的list和tuple。前者是一种有序集合,可以随时添加和删除其中的元素,len()函数可以用于获得list元素的个数,我们也可以用索引访问list中每一个位置的元素,从0开始,可以用append()向list中追加元素到末尾,也可以用insert()把元素插入指定位置,如把某元素替换成别的元素可以直接赋值给对应的索引位置,用pop(i)可以删除指定位置的元素,list里元素的数据类型可以不同。后者与前者部分应用类似,但是它一旦初始化后就不能更改。



    展开全文
  • [python刷题]python排序函数sort和sorted

    万次阅读 2019-01-05 20:00:12
    注意sort()函数只能用在列表list的排序上 ls = list([5, 2, 3, 1, 4]) new_ls = sorted(ls) ##或者使用ls.sort()即可,直接将ls改变 print(new_ls) 2、sorted()函数 sorted()能用在任何可迭代对象的排序上,而且...
  • 自定义Python排序函数比较方式

    千次阅读 2019-04-04 22:18:12
    当你想按自己的方式对数组元素进行排序时,我们需要自定义比较函数实现我们想实现的排序方式。 例1 以降序对数组进行排序 >>> def comp(x,y): ... return y-x ... >>> a = [1,8,4,5,2,7] ...
  • #python的内建排序函数有 sort、sorted两个。 sort()方法仅仅定义在list中,而sorted()方法是对所有的可迭代序列都有效,并且针对任何的可迭代序列,sorted()都是返回一个list。 sorted()函数-->举个...
  • Python排序函数sort()和sorted()详解

    万次阅读 多人点赞 2017-07-27 12:11:52
    我们需要对List进行排序Python提供了两个方法 ...用内建函数sorted进行排序(从python 2.4开始) sort函数定义:sort(cmp=None, key=None, reverse=False) sorted函数定义:sorted(iterable, cmp=None, key=
  • s = [2, 3, 1, 4, 5] sorted(range(len(s)), key=lambda k: s[k]) [2, 0, 1, 3, 4]
  • python排序函数sort()、sorted()、argsort()

    千次阅读 2016-07-22 18:36:55
    1.sort() sort()是可变对象的方法,无参数,无返回值,但会影响改变对象。 例如: >>> a = [2,5,1,3,0,1,8] >>> a.sort() >>> a [0, 1, 1, 2, 3, 5, 8] ...sorted()不会发生上述情况,sorted()函数
  • python排序函数sort()与sorted()区别

    万次阅读 2015-01-25 16:58:23
    sorted是python的内建函数:sorted(iterable, cmp=None, key=None, reverse=False) 参数解析: cmp:比较函数,比较什么参数由key决定。例如:cmp(e1, e2) 是具有两个参数的比较函数,返回值:负数(e1 e2)。
  • python3.7排序函数

    千次阅读 2020-10-10 23:56:27
    python3.7排序函数
  • python排序函数

    千次阅读 2018-10-23 20:23:43
    python排序函数(sort)
  • python自定义排序函数

    万次阅读 2016-01-02 16:47:08
    python自定义排序函数,有两种方式 第一种自定义函数: # 自定义排序函数 def func(x,y): if x return -1 if x==y: return 0 else: return 1 a = [3,6,2,8,4] print u'正序排列:',sorted(a,func) print u'
  • 这篇文章主要介绍了Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 一. lamda匿名函数  为了解决一些简单的需求而...
  • Python3 list 排序函数详解

    万次阅读 多人点赞 2018-05-28 18:55:03
    Python3 list 排序函数详解 一、列表的sort排序函数 函数原型: list.sort(key=None,reverse=False) 函数功能: 对原列表进行排序,完成排序后,原列表变为有序列表。默认情况(不传入任何参数时)按字典顺序...
  • Python列表排序函数

    千次阅读 2017-08-31 19:24:00
    sort函数原地排序,直接改变输入的列表,而无返回值。x = [2, 1, 3] x.sort() print x # output: [1, 2, 3] print x.sort() # output: None若要实现赋值,则先把x的副本(一个新对象)赋值给一个变量,再排序,这样...
  • 目录 Key的作用原理 例子1 例子2 例子3 python3 sorted取消了对cmp的支持。...python3 帮助文档: sorted(iterable, key=None, reverse=...Python2中的**自定义布尔函数cmp=custom_cmp(x, y)由Python3中的key=custom_

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 162,004
精华内容 64,801
关键字:

python排序函数

python 订阅