【排序】functools

最近遇到两道题,

1.对元素是链表的list排序

2.根据元素的频率对list排序

都需要自定义【比较函数】,定义完比较函数后,选一种排序方法就可以了,但python的话,还可以直接用内置的functools,如果笔试的时候,可以直接调。

functools使用方法

import functools
def cmp(a,b):
    #a<b  return 复数
    #a>b  return 正数
    #a=b  return 0

nums.sort(key=functools.cmp_to_key(cmp))

eg1.  对元素是链表的list排序:

定义:

拥有相同前缀的,更长的链表更大

结点值更大时,链表更大

所以,cmp函数定义为

def lower(node1,node2):#<=
    while node1 and node2:
        if node1.val==node2.val:
            node1=node1.next
            node2=node2.next
        elif node1.val<node2.val:
            return True
        elif node1.val>node2.val:
            return False
    if node1 and not node2:
        return False
    elif node2 and not node1:
        return True
    else:
        return True

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FunctionTools是一个Python标准库,提供了一些函数式编程工具,比如部分应用函数,函数组合等。它的主要特点是简洁而且具有高度的可重用性,可以减少代码中的冗余部分,提高代码的可读性和可维护性。 ### 回答2: functools是Python标准库中的一个模块,它提供了一些有用的函数以便进行函数式编程。它的功能特点主要有以下几个方面: 1. 偏函数(Partial functions):functools模块提供了partial()函数,它可以接受一个函数和部分参数,并返回一个新的函数。这样我们可以固定某些参数,将函数调用的复杂性减少。偏函数可以减少代码冗余,提高代码可读性和重用性。 2. 缓存(Caching):functools模块中的lru_cache()装饰器提供了缓存一个函数调用的功能。通过使用缓存,可以减少函数的调用次数,提高程序执行效率。在大量计算且计算结果具有重复性的情况下,使用缓存可以显著提升程序性能。 3. 比较器(Comparators):functools模块中的cmp_to_key()函数允许将一个比较函数转换为一个“键”函数,以便进行排序操作。这样可以方便地对复杂的数据结构进行排序。 4. 部分排序(Partials ordering):functools模块中的partial_ordering()装饰器可以方便地为一个类提供部分排序的功能。通过定义__lt__、__le__、__gt__和__ge__这些特殊方法的部分子集,可以自动生成其余的部分方法,从而实现部分排序。 总的来说,functools模块提供了一些方便的函数和装饰器,可用于简化函数调用、提高程序性能和实现其他有用的功能。它是函数式编程在Python中的一个重要工具。 ### 回答3: functools是Python标准库中的一个模块,它提供了一系列对函数进行操作的工具。其功能特点主要体现在以下几个方面: 1. 偏函数(partial):偏函数是通过固定部分函数参数的值来创建新函数的一种技术。functools模块中的partial函数可以帮助我们创建偏函数,可以使用它在定义函数时固定某些参数的值,从而减少函数调用时需要的参数个数。 2. 缓存函数(lru_cache):functools模块中的lru_cache装饰器可以将函数的计算结果缓存起来,以提高函数的执行效率。当函数的参数相同时,可以直接从缓存中获取结果,而不需要重新计算。这对于计算复杂性比较高的函数来说,能够显著提升程序的性能。 3. 包装器(wraps):包装器是一种用于修改函数行为的装饰器。functools模块中的wraps装饰器可以被用于创建一个新的包装函数,可以保留原始函数的名称、文档字符串和注解,并且能够正确地处理函数调用签名。 4. 比较函数(total_ordering):functools模块中的total_ordering装饰器可以用于简化比较函数的编写。通过在类中定义__eq__、__lt__等比较方法,并使用total_ordering装饰器,可以自动生成其他比较方法的实现。 总之,functools模块提供了一些有用的函数工具,可以帮助我们更方便地处理函数相关的操作,提高开发效率和程序性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值