精华内容
下载资源
问答
  • python 自定义排序

    万次阅读 2019-01-05 11:27:26
    自定义排序函数 先不关心其实原地排序还是有返回值的排序,研究其内部的排序原理,其内部是根据什么排序的呢,默认的排序方法是内建的cmp函数 对于cmp(x,y): 如果想要x排在y前面那么返回一个负数,如果想x排在y...

    我们都知道python中有两种排序的方法,
    原地排序的x.sort(),和不改变原列表有返回值的sorted(x)

    自定义排序函数

    先不关心其实原地排序还是有返回值的排序,研究其内部的排序原理,其内部是根据什么排序的呢,默认的排序方法是内建的cmp函数

    对于cmp(x,y):
    如果想要x排在y前面那么返回一个负数,如果想x排在y后面那么返回一个正数
    

    根据这个原理我们可以自定义一些排序函数compare_personal,并将这个函数传入sort或sorted方法中。
    在python2中,用关键字cmp直接传入即可,

    a = [1,2,4,3,5]
    def compare_personal:
    		pass
    a.sort(cmp=compare_personal)
    sorted(a,cmp=compare_personal)
    

    而在python3中,cmp关键字被移除了,这样的写法就无法运行了,需要借助functools包来完成

    a = [1,2,4,3,5]
    def compare_personal(x,y):
        pass
    a.sort(key= functools.cmp_to_key(compare_personal))
    c = sorted(b, key=functools.cmp_to_key(compare_personal))
    

    好了,知道如何使用以后就可以构建自定义的排序函数,比如们要对一个数组进行排序,排序的依据是元素mode7后的大小,按照升序排列,我们可以电泳仪排序函数如下

    import  functools
    a = [3,8,14,6,7]
    def compare_personal(x,y):
        return x%7-y%7
    a.sort(key=functools.cmp_to_key(compare_personal))
    b = sorted(a,key=functools.cmp_to_key(compare_personal))
    print(a)
    print(b)
    >>>[14, 7, 8, 3, 6]
    >>>[14, 7, 8, 3, 6]
    

    按照某一元素进行排序

    加入我们有下面的数据,列表中都是元组,我们想根据元组中的某些元素进行排序。
    元组中的三个元素分别表示姓名,班级和年龄

    students = [("zhangsan","A",10),("lisi","C",9),("lisi1","A",9),("lisi2","B",9),("wangwu","B",13)]
    

    我们只需要把要排序的元素通过lamada 表达式返回即可,

    students.sort(key=lambda x:(x[2],x[1]))
    print(students)
    >>[('lisi1', 'A', 9), ('lisi2', 'B', 9), ('lisi', 'C', 9), ('zhangsan', 'A', 10), ('wangwu', 'B', 13)]
    

    返回一个很好理解,就是根据那一个元素进行排序,上面的代码中返回了两个元素,也就是数据中x[2]相同的数据会根据x[1]再排个序
    如果是对象的话也是一个道理,lamada返回对象中要排序的属性名称即可

    class student:
        def __init__(self,name,age,weight):
            self.name = name
            self.age = age
            self.weight = weight
    
    std1 = student("std1",10,55)
    std2 = student("std2",8,30)
    std3 = student("std3",11,65)
    std4 = student("std4",9,50)
    
    students = [std1,std2,std3,std4]
    students.sort(key= lambda x:x.age)
    for std in students:
        print(std.name)
    >>>
    std2
    std4
    std1
    std3
    
    利用Operator 模块指定排序元素

    上面我们说了两种情况,一个是排序元组要通过下标来指定要被排序的元素,第二种是排序对象,要通过指定属性名来指定排序依据的属性。Operator模块的attrgetteritemgetter
    itemgetter可用来指定下标
    attrgetter可用来指定属性名

    import operator
    students = [("zhangsan","A",10),("lisi","C",9),("lisi1","A",9),("lisi2","B",9),("wangwu","B",13)]
    students.sort(key=operator.itemgetter(2))
    print(students)
    >>>
    [('zhangsan', 'A', 10), ('lisi1', 'A', 9), ('lisi2', 'B', 9), ('wangwu', 'B', 13), ('lisi', 'C', 9)]
    
    
    import  operator
    class student:
        def __init__(self,name,age,weight):
            self.name = name
            self.age = age
            self.weight = weight
    
    std1 = student("std1",10,55)
    std2 = student("std2",8,30)
    std3 = student("std3",11,65)
    std4 = student("std4",9,80)
    
    students = [std1,std2,std3,std4]
    students.sort(key= operator.attrgetter("weight"))
    for std in students:
        print(std.name)
    >>>
    std2
    std1
    std3
    std4
    
    展开全文
  • Python 自定义排序

    2018-07-10 20:50:00
    自定义排序方法 可以通过将函数传入sorted函数的cmp参数来实现按照自定义规则排序 # 利用sorted对数组arr进行排序 # 将自定义的排序函数foo 传给 cmp # 返回排序后的数组副本 arr = sorted(arr, cmp = foo) 自定义...

    自定义排序方法

    可以通过将函数传入sorted函数的cmp参数来实现按照自定义规则排序

    # 利用sorted对数组arr进行排序
    # 将自定义的排序函数foo 传给 cmp 
    # 返回排序后的数组副本
    arr = sorted(arr, cmp = foo)

    自定义排序函数必须

    • 接受两个参数 n1, n2
    • 返回一个整数

    返回的整数

    • 为负数,则n1 < n2
    • 为正数,则n1 > n2
    • 为0, 则n1 == n2

    自定义排序对象

    假设我们有如下二维数组

    l = [[1,2], [2, 18], [3, 6]]

    我们想按照每个子数组的第二项来排序。

    此时可以这样

    l.sort(key=lambda x: x[1])

    转载于:https://www.cnblogs.com/josephchuh/p/9291395.html

    展开全文
  • # 根据字典的值 对字典进行排序 phonebook = {'Linda':'7750', 'Bob': '9345', 'Carrol': '5834'} ret = sorted(phonebook.items(), key=itemgetter(1)) # key=itemgetter(1) 则是对key进行排序 print(ret) # [('...
  • Python自定义排序

    2020-10-24 14:57:32
    还是不习惯python的key方法,习惯了C++的cmp函数,这里需要用到cmp_to_key的方法即可。C++中x[0] < y[0]即可升序,这里是x[0] - y[0] from functools import cmp_to_key a = [[0,1],[0,2],[4,5],[2,3]] def cmp(x...

    还是不习惯python的key方法,习惯了C++的cmp函数,这里需要用到cmp_to_key的方法即可。C++中x[0] < y[0]即可升序,这里是x[0] - y[0]

    from functools import cmp_to_key
    a = [[0,1],[0,2],[4,5],[2,3]]
    def cmp(x,y):
        if x[0] == y[0]: # 第一个元素相同
            return x[1] - y[1]# 那就按照第二个元素升序
        return x[0] - y[0] #第一个元素升序
    a = sorted(a,key=cmp_to_key(cmp))
    

    参考

    展开全文
  • python自定义排序法 1.利用pycharm实现python自定义排序法 2.完整代码: #自定义排序法 numbers = [5,7,8,3] for i in range(len(numbers)): for j in range(i+1,len(numbers)): if numbers[i]>numbers[j]: ...

    python自定义排序法
    1.利用pycharm实现python自定义排序法
    2.完整代码:

    #自定义排序法
    numbers = [5,7,8,3]
    for i in range(len(numbers)):
        for j in range(i+1,len(numbers)):
            if numbers[i]>numbers[j]:
                numbers[i],numbers[j]=numbers[j],numbers[i]
                print(numbers)
                print('----->',i+1)
    

    在这里插入图片描述
    运行结果如图所示,具有动态让你了解算法的实现。

    展开全文
  • 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 自定义排序高级函数1、自定义排序高级函数 `sort_self`2、示例13、示例2 1、自定义排序高级函数 sort_self def sort_self(iterable, *, key=None, reverse=False): # [5, 1, 3, 0, 6] newlist = [] # 5 ...
  • python 自定义排序函数

    2016-07-29 16:18:00
    自定义排序函数 Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较...
  • 题目 把数组排成最小的数 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的...自定义排序规则 防止数据过大造成溢出 代码: class Solution: def PrintMinNumber(self, numbers): len_n ...

空空如也

空空如也

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

python自定义排序

python 订阅