zoukankan      html  css  js  c++  java
  • sort排序用法

    Python】 sorted函数

    我们需要对List、Dict进行排序,Python提供了两个方法
    对给定的List L进行排序,
    方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本
    方法2.用built-in函数sorted进行排序(从2.4开始),返回副本,原始输入不变

    --------------------------------sorted---------------------------------------
    >>> help(sorted)
    Help on built-in function sorted in module __builtin__:

    sorted(...)
        sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
    ---------------------------------sort----------------------------------------
    >>> help(list.sort)
    Help on method_descriptor:

    sort(...)
        L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
        cmp(x, y) -> -1, 0, 1
    -----------------------------------------------------------------------------

    iterable:是可迭代类型;
    cmp:用于比较的函数,比较什么由key决定;
    key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;
    reverse:排序规则. reverse = True  降序 或者 reverse = False 升序,有默认值。
    返回值:是一个经过排序的可迭代类型,与iterable一样。

    参数说明:
    (1)  cmp参数
     
    cmp接受一个函数,拿整形举例,形式为:
    def f(a,b):
         return a-b
    如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了
     
    (2)  key参数
     
     key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下
    def f(a):
         return len(a)
    key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
     
    (3) reverse参数
    接受False 或者True 表示是否逆序
    以上知识来自于:https://www.cnblogs.com/sysu-blackbear/p/3283993.html
    python解决https://www.hackerrank.com/challenges/nested-list/problem的问题
     1 def f(student):  # 排序函数
     2     return student[1]
     3 def choice(student,second,min_count):#判断学生列表长度
     4     if len(student)>3:
     5         while second>0:
     6             second -= 1
     7             print(student[min_count+second][0])
     8     else:
     9        for i in range(second):
    10             print(student[min_count+i][0])
    11 
    12 def second_index(student):  # 求出第二小的成绩的下表
    13     min_count = 0
    14     min_score = student[0][1]
    15     for one in student:
    16         if one[1] == min_score:
    17             min_count += 1
    18     return min_count
    19 
    20 
    21 def second_count(studnet, min_count):  # 求出第二小的成绩出现的次数
    22     second_count = 0
    23     second_score = student[min_count][1]
    24     for one in student[min_count:]:
    25         if one[1] == second_score:
    26             second_count += 1
    27     return second_count
    28 
    29 if __name__ == '__main__':
    30     student=[]
    31     i=0
    32     for x in range(int(input())):
    33         name = input()
    34         score = float(input())
    35         list=[name,score]
    36         student.append(list)
    37     else:
    38         student.sort(key=f)
    39     min_count=second_index(student)#得出第二大数的下标
    40     second=second_count(student,min_count)#得出第二小的数出现的次数
    41     choice(student,second,min_count)
    View Code
     
     
  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/Mr-l/p/10507089.html
Copyright © 2011-2022 走看看