• Python排列函数:sort、sorted


    排序函数介绍:sort()和sorted()都属于Python list的排序方法

    区别:sort()属于永久性排列,直接改变该list; sorted属于暂时性排列,会产生一个新的序列。

    #sorted()
    >>> sorted([5, 2, 3, 1, 4])
    [1, 2, 3, 4, 5]
    
    #sort()
    >>> L = [5, 2, 3, 1, 4]
    >>> L.sort()
    >>> print L
    [1, 2, 3, 4, 5]
    #sort后会返回None
    def paixu(list):
        return list.sort()
    
    paixu(['a','f','g','b','a'])
    
    #并没输出结果,返回None
    
    #sorted后会返回列表
    def paixu(list):
        return sorted(list)
    
    paixu(['a','f','g','b','a'])
    
    #输出结果
    ['a', 'a', 'b', 'f', 'g']

    以下对常用的sorted进行介绍:

    python 内置的sorted()函数可以对一个list进行排序:

    >>> sorted([8,3,8,11,-2])
    [-2, 3, 8, 8, 11]

    既然说是高阶函数,那么它还可以接受一个key函数来实现自定义的排序,比如按照绝对值大小进行排序:

    >>> sorted([8,3,8,11,-9],key=abs)
    [3, 8, 8, -9, 11]

    key指定的函数将作用于list中的每一个元素上,根据key函数返回的结果进行排序。

    来看看字符串排序的问题

    >>> sorted(['abc','Abc','Cba','bAc'])
    ['Abc', 'Cba', 'abc', 'bAc']

    默认的,对于字符串,sorted函数按照ASCII的大小进行排序,因为C<a,大写的C会排在小写的a前面。

    如果我们想要达到忽略大小写的排序,只需要更改一下key函数:

    >>> sorted(['abc','Abc','Cba','bAc'],key=str.lower)
    ['abc', 'Abc', 'bAc', 'Cba']

    结合lambda关键字按年龄排序:

    students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    sorted(students, key=lambda s: s[2]) #按年龄排序
    
    #输出结果
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    进一步,要进行反向排序,可以传入第三个参数reverse=True:

    >>> sorted(['abc','Abc','Cba','bAc'],key=str.lower,reverse=True)
    ['Cba', 'bAc', 'abc', 'Abc']

    sorted()排序的关键在于实现一个映射函数!

    练习:

    把一句话的每个单词按照开头的字母排序

    思路:根据空格用split()把字符串变成list,然后用sort或者sorted排序

    # change this value for a different result
    
    my_str = "Hello this Is an Example With cased letters"
    
    #第一种方法:这段长代码很难受
    '''
    a = my_str.upper()
    print(a)
    b = a.split(' ')
    print(b)
    b.sort()
    print(b)
    #your solution here
    '''
    
    #第二种方法:结合key关键字一条就出来了
    sorted(my_str.split(),key=str.lower)
    
    #输出结果
    ['an', 'cased', 'Example', 'Hello', 'Is', 'letters', 'this', 'With']
    
    #第三种,无视大小写排序
    # breakdown the string into a list of words
    words = my_str.split()
    
    # sort the list
    words.sort()
    
    # display the sorted words
    
    print("The sorted words are:")
    for word in words:
        print(word, end=' ')
    
    #输出结果
    The sorted words are:
    Example Hello Is With an cased letters this 

    用一组tuple表示学生名字和成绩:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)],然后分别按名字和成绩排序

    思路:定义两个函数用用t[0]和t[1]分别表示名字和成绩,然后用sort或sorted排序

    #按名字字母排序
    >>> L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
    >>> def by_name(t):
        return t[0]     #t[0]表示名字
    
    >>> L2 = sorted(L,key = by_name)
    >>> print(L2)
    [('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
    
    #按成绩低到高排序
    >>> def by_score(t):
        return t[1]     #t[1]表示成绩
    
    >>> L2 = sorted(L,key = by_score)
    >>> print(L2)
    [('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]
    Github地址:https://github.com/kumataahh
  • 相关阅读:
    td内元素居顶,td元素不随高度的撑开而变位置
    C#连接MySql数据库的方法
    福昕阅读器注册码
    html初始化
    解决android的ListView嵌套在ScrollView中不能被滚动的问题
    popupWindow弹出来后,背景变暗,半透明
    android自定义radiobutton样式文字颜色随选中状态而改变
    下拉刷新
    android去掉顶部标题栏
    android使用微软雅黑字体
  • 原文地址:https://www.cnblogs.com/kumata/p/9058405.html
Copyright © 2020-2023  润新知