zoukankan      html  css  js  c++  java
  • sort 、sorted、range、join方法 数字的正序、倒叙、翻转

    大家可以想象一下 如果一串数字 是混乱的没有顺序这个时候你想要排序怎么办呢?  这个时候顺势而生的就有了sort方法

    把数字从大到小的排列----->sort()

    只对列表

    li = [3, 5, 7, 8, 1, 0, 89, 45, 34]
    li.sort()
    print(li)

    把列表中的数字从小到大排序---->sort(reverse=True)

    只对列表

    li = [3, 5, 7, 8, 1, 0, 89, 45, 34]
    li.sort(reverse=True)
    print(li)

    把你输入的列表中数字翻转输出: reverse可以直接对列表或者整形进行翻转

    li = [3, 5, 7, 8, 1, 0, 89, 45, 34]
    li.reverse()
    print(li)

    sort()是对列表本身进行排序

    sort()是直接对列表本身进行排序 
    
    可以看出赋值后也是最自己本身排序 赋值的没有意义
    my_list = [3, 5, 1, 4, 2]
    l = my_list.sort(reverse = True)
    print(my_list)      #[5, 4, 3, 2, 1]
    print(l)  # None

    使用sort()方法对list排序会修改list本身,不会返回新list,通常此方法不如sorted()方便,但是如果你不需要保留原来的list,此方法将更有效sort()。

    sort()不能对dict字典进行排序

    sorted()保留本身的排序:

    默认是从小到大排序

    sorted()对列表进行排序的时候会保留本身的值生成一个新的列表
    my_list = [3, 5, 1, 4, 2]
    l = sorted(my_list)
    print(my_list)   # [3, 5, 1, 4, 2]
    print(l)   # [1, 2, 3, 4, 5]

    sorted()加上key参数:

    加上key参数是按照key参数的规则来排序

    key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较

    对复杂的元组进行排序:

    student_tuples = [
            ('john', 'A', 15),
            ('jane', 'B', 12),
            ('dave', 'B', 10),
    ]
    
    result = sorted(student_tuples,key = lambda student:student[2])   # 默认按照下标为2 的排序 是从小到大排序
    print(result)   # 输出[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    
    
    result_one = sorted(student_tuples,key = lambda student:-student[2])
    print(result_one)  # 输出 [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

    以上可以看出排序是按照10, 12, 15值进行排序的,因为函数lambda student:student[2]返回的值分别是10, 12, 15。

    而加了-号的就是从后向前排序的 倒着排序的

    lambda student: student[2]  等价于

    def f(student):

      return student[2]

     

    小练习:(面试题)

    对以下的学生按照成绩从大到小来排序

    l = [('Bod',75),('Adam',92),('Bar',66),('Lisa',88)]

    l = [('Bod',75),('Adam',92),('Bar',66),('Lisa',88)]
    
    result = sorted(l,key = lambda num : num[1])
    print(result)

    也可以:

    def by_num(t):   # 这个函数就好比我们for循环了l列表把它内部的所有内容进行了一一拿出来
      
      print(t)   #('Bod', 75)  #得到的结果是以for循环的结果来打印的
      print(t[1]) # 75

      
    return t[1]

    result = sorted(l,key = by_num)
    print(result)

    加个-号就是按照从大到小反转排序

    ret  = sorted(l, key = lambda num :-num[1])  # [('Adam', 92), ('Lisa', 88), ('Bod', 75), ('Bar', 66)]
    print(ret)



    # 因为有key的存在所以这个是相当于把列表的可迭代对象进行for循环进行遍历、

    # [11, 33, 4, 2, 11, 4, 9, 2]去重并保持原来的顺序
    首先有两部分 去重和保持原来顺序
    
    先去重
    
    l = [11, 33, 4, 2, 11, 4, 9, 2]
    
    list_one =list(set(l))# 先去重
    list = sorted(list_one,key = l.index)  # key是排序规则 按照l的下标来排序
    print(list)   # [11, 33, 4, 2, 9]
    # 按照年龄从小到大排序
    list3 = [
        {"name": "金老板", "age": 30},
    
        {"name": "Eva_J", "age": 18},
    
        {"name": "MJJ", "age": 29}
    ]
    
    result = sorted(list3,key = lambda age:age['age'])  # 按照年龄从小到大
    print(result)
    # 相当于:
    def age(t):  # 这一步相当于for循环你要排序的可迭代对象
        return -t['age']   # 按照年龄从大到小的排序
    
    result = sorted(list3,key = age)
    print(result)

    range 当成数字列表、范围

    li = [3, 5, 7, 8, 1, 0, 89, 45, 34]
    for temp in range(0,len(li)):  #这个时候你就可以看出来range的意思是代表你在括号内输入的所占的范围
        print(temp)
    for temp in range(0,101,2) :  #打印0-10的所有偶数  记住所有的切片都是顾头不顾腚
        print(temp)

    join 方法 用字符串做一个连接符

    连接可以替代对象中的每一个元素,形成一个新的字符串  

    s = '*'.join('nihao') 这个时候表达的就是用*号把n i h a o给连接起来其实就是用‘’引号的内容把括号内的内容给隔开

    i = '_'.join('nihao')
    print(i)  # 结果n_i_h_a_o

     join也可以把字典和元组转化为字符串  但是里面的元素必须是字符串类型的  但是字典只能把字典的key转化为字符串

    >>> l = {'name':'nihao'}
    >>> s= ' '.join(l)
    >>> print(s)
    name  #大家可以看出这个字典转化为字符串是只能把key值转化为字符串
    
    >>> li =('laoxiang', 'nihao')
    >>> n = ' '.join(li)
    >>> print(n)
    laoxiang nihao
    >>> 

     join也可以把一个列表内全是字符串那么就可以用join方法把这个列表转化为字符串  前提是不能是int类型必须是str类型

    >>> lis = ['nihao', 'wohao', 'dajiahao']
    >>> s= ' '.join(lis)  #用空格分割
    >>> print(s)
    nihao wohao dajiahao
    
    #用不用空格来分割就是你引号内设置的
    >>> m = ''.join(lis) #不用空格分割
    >>> print(m)
    nihaowohaodajiahao
    >>> 
  • 相关阅读:
    基于SUSE Linux做NFS文件挂载
    Java实现蓝桥杯调和级数
    Java实现蓝桥杯调和级数
    Java实现分割矩形
    Java实现分割矩形
    Java实现分割矩形
    Java实现分割矩形
    Java实现分割矩形
    Java实现九阶数独
    Java实现九阶数独
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/8619075.html
Copyright © 2011-2022 走看看