首页 > 其他分享 >2024/12/7【哈希表】 LeetCode453 四数相加II ,知识点:defaultdict,lambda函数,dict的get函数

2024/12/7【哈希表】 LeetCode453 四数相加II ,知识点:defaultdict,lambda函数,dict的get函数

时间:2024-12-12 17:10:24浏览次数:4  
标签:defaultdict 知识点 四数 函数 get dict print 默认值 lambda

454. 四数相加 II - 力扣(LeetCode)

代码随想录 (programmercarl.com)

本题解题步骤:

  1. 首先定义 一个unordered_map(在python中为字典),key放a和b两数之和,value 放a和b两数之和出现的次数。
  2. 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
  3. 定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
  4. 再遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
  5. 最后返回统计值 count 就可以了
from collections import defaultdict
class Solution:
    def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
        res_dict = defaultdict(int)
        for num1 in nums1:
            for num2 in nums2:
                res_dict[num1+num2] += 1
        
        count = 0
        for num3 in nums3:
            for num4 in nums4:
                target = -(num3+num4)
                if target in res_dict:
                    count += res_dict[target]
        
        return count

知识点:

1. dict的get函数

在Python中,get 是字典(dict)对象的一个方法,用于安全地获取指定键对应的值。如果键不存在于字典中,它不会抛出错误,而是返回一个默认值(默认值可自定义,默认为 None)。

语法

dictionary.get(key, default=None)

参数说明

  1. key:要查找的键。
  2. default(可选):如果键不存在,则返回的默认值。默认为 None

返回值

  • 如果 key 存在于字典中,返回对应的值。
  • 如果 key 不存在,返回 default 值(如果未提供 default,则返回 None)。

使用场景

get 方法的主要作用是避免在访问字典中不存在的键时抛出 KeyError


示例代码

1. 基本用法

my_dict = {'name': 'Alice', 'age': 25}

# 键存在时返回对应值
print(my_dict.get('name'))  # 输出: Alice

# 键不存在时返回默认值 None
print(my_dict.get('gender'))  # 输出: None

2. 提供默认值

my_dict = {'name': 'Alice', 'age': 25}

# 键不存在时返回指定默认值
print(my_dict.get('gender', 'Unknown'))  # 输出: Unknown

3. 与直接索引对比

my_dict = {'name': 'Alice'}

# 直接索引会抛出错误
# print(my_dict['age'])  # KeyError: 'age'

# 使用 get 避免错误
print(my_dict.get('age'))  # 输出: None

注意事项

  1. 如果键存在,get 方法始终返回键对应的值,而不会理会 default 参数。
  2. 当需要访问字典中的键且不确定键是否存在时,优先考虑使用 get 方法来避免异常。

2.defaultdict有get方法吗?

在Python中,defaultdictcollections 模块中的一个类,它是 dict 的子类。因此,defaultdict 也继承了 dict 的所有方法,包括 get 方法。

defaultdict.get 方法的行为

  • 与普通字典中的 get 方法一致:返回指定键的值,如果键不存在,返回提供的默认值(或默认返回 None)。
  • 注意:与 defaultdict 的默认值行为无关。调用 get 方法时,不会触发 defaultdict 为缺失键生成默认值的机制。

示例代码

1. 使用 get 方法

from collections import defaultdict

# 定义一个默认值为 0 的 defaultdict
dd = defaultdict(lambda: 0, {'a': 1, 'b': 2})

# 存在的键
print(dd.get('a'))  # 输出: 1

# 不存在的键,get 返回 None
print(dd.get('c'))  # 输出: None

# 不存在的键,但使用默认值参数
print(dd.get('c', 'default_value'))  # 输出: default_value

2. 直接访问键与使用 get 的区别

from collections import defaultdict

dd = defaultdict(lambda: 'default', {'a': 1, 'b': 2})

# 使用直接访问键时,defaultdict 会生成默认值
print(dd['c'])  # 输出: default
print(dd)       # 输出: defaultdict(<function <lambda>>, {'a': 1, 'b': 2, 'c': 'default'})

# 使用 get 方法时,defaultdict 不会生成新键
print(dd.get('d'))  # 输出: None
print(dd)           # 输出: defaultdict(<function <lambda>>, {'a': 1, 'b': 2, 'c': 'default'})

总结

  • defaultdictget 方法与普通字典完全一致,只是查找键而不创建缺失键。
  • 如果希望触发 defaultdict 的默认值行为,应直接使用键访问(如 dd[key])。

3.理解

defaultdict(lambda : 0)

在 Python 中,lambda 是一种创建匿名函数的方式,通常用于定义简单的、只有一个表达式的函数。

语法

lambda arguments: expression
  • arguments:函数的参数(可以有多个,用逗号分隔)。
  • expression:返回值是计算后的表达式。

注意

  • lambda 函数是一个表达式,而不是一个完整的函数定义,因此可以在一行内编写。
  • 它没有名字,所以被称为匿名函数。

defaultdict 中的用法

当使用 defaultdict(lambda: 0) 时:

  • lambda: 0 是一个匿名函数,它没有参数。
  • 每当 defaultdict 遇到一个不存在的键时,就会调用这个匿名函数,生成并返回默认值 0

示例

from collections import defaultdict

# 创建一个 defaultdict,其中不存在的键默认值为 0
dd = defaultdict(lambda: 0)

# 尝试访问不存在的键
print(dd['a'])  # 输出: 0,因为 lambda: 0 返回了默认值

# 为键赋值
dd['a'] += 1
print(dd['a'])  # 输出: 1

理解 lambda: 0 的替代写法

lambda: 0 等价于以下普通函数:

def default_value():
    return 0

然后使用:

from collections import defaultdict

dd = defaultdict(default_value)

lambda 写法更简洁,常用于需要快速定义简单逻辑的场景。


更多 lambda 示例

1. 带参数的 lambda

# 一个简单的加法函数
add = lambda x, y: x + y
print(add(3, 5))  # 输出: 8

2. 用于排序

# 按元组的第二个元素排序
data = [(1, 2), (3, 1), (5, 4)]
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data)  # 输出: [(3, 1), (1, 2), (5, 4)]

3. map 结合

# 使用 lambda 将列表中的元素平方
numbers = [1, 2, 3, 4]
squared = map(lambda x: x**2, numbers)
print(list(squared))  # 输出: [1, 4, 9, 16]

总结

lambda 是一种快捷方式,用于定义简单函数。在 defaultdict(lambda: 0) 中,lambda: 0 定义了一个返回值为 0 的匿名函数,用于为缺失的键提供默认值。

4.defaultdict(lambda: 0, {'a': 1, 'b': 2})怎么理解

defaultdict(lambda: 0, {'a': 1, 'b': 2}) 是一个 defaultdict 对象的定义,它具有以下功能和特点:


构造含义

  1. lambda: 0

    • 定义了一个匿名函数,当访问不存在的键时,这个函数会被调用并返回 0 作为默认值。
  2. {'a': 1, 'b': 2}

    • 初始化字典,包含键值对 'a': 1'b': 2
  3. 组合含义

    • 如果访问的键在初始化字典中存在,则返回对应的值。
    • 如果访问的键不存在,则调用 lambda: 0,返回 0 并将该键添加到字典中,其值为 0
  1. 动态扩展

    • 每次访问不存在的键时,defaultdict 会动态扩展字典内容,不需要手动处理缺失键的情况。

标签:defaultdict,知识点,四数,函数,get,dict,print,默认值,lambda
From: https://www.cnblogs.com/spp20/p/18603001

相关文章

  • Python学习笔记 - 探索函数式编程常用方法
    函数式编程是Python编程中一种高度抽象的编程范式,以函数为中心,通过不变的数据结构和纯函数来构建程序。函数式编程的核心思想在于“无副作用”和“数据不可变性”,这样的编程方式能提高代码的可读性和可维护性,减少错误的发生,特别适合用于处理复杂的数据操作、并行计算和数据......
  • 一张图教会你查找函数
    大家好,我是小鱼。一张图给你教明白:这个函数是一个查找函数,它的作用是当我们给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找的值。结合给的图片中的例子来做说明:我们看一下这张图,表一是一些人的信息,我们想要在表2中自动找到乙的年龄。第1部分:lookup_valu......
  • 实现单词的简单倒置和atoi函数
    单词的简单倒置主要步骤1.将整个字符串逆序2.再将每个单词逆序c语言代码实现过程atoi函数c语言代码简单实现 复杂实现考虑方面1.空字符串或仅包含空白字符串2.正负号3.非数字字符4.数字溢出c语言实现  相关代码解释 1.跳过前导空格:使用isspace函......
  • nice函数和nice 命令
    1. nice 命令(Linux/Unix系统)在类Unix系统(如Linux)中,nice是一个命令,用于设置一个进程的优先级,或者说它的"nice值"。这个优先级影响进程的CPU时间分配。基本用法:bashCopyCodenice-n<nice值><命令>参数说明:-n<nice值>:指定进程的nice值,范围通常从-20(最高......
  • 关于内联函数(实际使用的例子)
    C++内联函数(inlinefunction)是指在编译时将函数调用直接替换为函数体的代码,从而避免函数调用的开销。1.它通常用于短小的函数,以提高程序的执行效率。2.内联函数通过在函数声明前加上inline关键字来定义。3.使用内联函数可以减少函数调用的栈操作,但过度使用可能增加代码体......
  • c#委托 ,自定义函数中使用委托
    Func<int,int,int>t=(j,i)=>i+j;//自定义委托Func表示有返回值,返回两个的和Console.WriteLine(t(6,4));//输出10Func<int,bool>a=delegate(intj){returnj>0;};Console.WriteLine(a(6));......
  • C++中的虚函数和纯虚函数
     在C++中,虚函数和纯虚函数都有助于实现多态性,但它们之间有几个重要的区别。 一、虚函数(VirtualFunction)1.定义:当你在基类中使用virtual关键字声明一个成员函数时,你就创建了一个虚函数。这意味着即使通过基类指针或引用调用了该函数,实际执行的可能是派生类中重写的......
  • Flask 视图函数
    视图函数是Flask应用中的核心部分,它负责处理请求并生成响应。视图函数与路由紧密结合,通过路由将URL映射到具体的视图函数。以下是对Flask视图函数的详细说明,包括如何定义、使用请求数据、返回响应、以及如何处理错误等。定义视图函数:视图函数是处理请求并返回响应的核......
  • OpenCV的简单函数
    一、二值化(threshold)1.二值化图二值化图:就是将图像中的像素改成只有两种值,其操作的图像必须是灰度图。2.实现方法,函数阈值法(THRESH_BINARY)反阈值法(THRESH_BINARY_INV)截断阈值法(THRESH_TRUNC):低阈值零处理(THRESH_TOZERO)超阈值零处理(THRESH_TOZERO_INV)OTSU阈......
  • Golang学习笔记_02——函数
    Golang测试功能应用Golang学习笔记_01——包函数文章目录函数1.定义2.返回值3.命名返回值4.可变参数源码Go语言中的函数是一种基本的编程结构,用于封装一段代码,以便在需要时多次调用。函数可以接收参数并返回结果,是实现代码复用和模块化编程的重要手段。1......