列表唯一数字

编写一个程序,用于在一组整数中找出唯一的数字。假设列表中只有一个唯一的数字。

  • 定义函数find_unique_number(),参数为num_list,数字列表。

  • 在函数内部,找出只出现一次的数字,并返回它。

  • 如果列表只有一个数字,则返回该数字。

  • 如果列表为空,则返回None

  • 如果不存在这样的数字,则返回None


分析:列表为空和列表只有一个数字比较好实现,难点就在于找出只出现一次的数字,并返回它。对于找出只出现一次的数字,在豆包的帮助下,看下面的代码

def find_unique_number(num_list):
    if not num_list:  # 判断列表是否为空
        return None
    if len(num_list) == 1:  # 判断列表是否只有一个数字
        return num_list[0]
    num_count_dict = {}  # 创建一个空字典,用于记录每个数字出现的次数
    for num in num_list:
        num_count_dict[num] = num_count_dict.get(num, 0) + 1  # 统计每个数字出现的次数
    for num, count in num_count_dict.items():
        if count == 1:  # 找到只出现一次的数字
            return num
    return None

代码解释:

统计数字出现次数

当列表不为空且不止一个数字时,创建一个空字典 num_count_dict,用于记录每个数字出现的次数。通过 for num in num_list: 循环遍历列表中的每一个数字,在循环中使用 num_count_dict[num] = num_count_dict.get(num, 0) + 1 语句来统计每个数字出现的次数。这里 num_count_dict.get(num, 0) 的作用是获取当前数字 num 在字典中已经记录的出现次数,如果数字 num 还没有在字典中出现过,就返回默认值 0,然后再加 1 后重新赋值给 num_count_dict[num],这样就实现了对每个数字出现次数的统计,例如数字 3 在列表中出现了 2 次,经过循环后 num_count_dict 字典中对应的键值对就是 {3: 2}

get方法:

在 Python 中,字典(dict)是一种非常常用的数据结构,用于存储键值对。而 get 方法是字典对象提供的一个内置方法,它的主要作用是获取指定键对应的值,其语法格式如下:

字典对象.get(键, 默认值)

这里有两个参数:

  • 键(必选):你需要指定想要获取其对应值的那个键,字典会根据这个键去查找相应的值。例如对于字典 my_dict = {"name": "Tom", "age": 25},如果想获取 "name" 这个键对应的值,就可以使用 my_dict.get("name")

  • 默认值(可选):这个参数是可选的,当你指定的键在字典中不存在时,get 方法就会返回这个默认值。如果不提供默认值参数,且键不存在时,get 方法会返回 None。例如,对于上述的 my_dict 字典,如果执行 my_dict.get("city"),因为 "city" 这个键不在字典中,所以会返回 None;而如果执行 my_dict.get("city", "unknown"),由于 "city" 键不存在,但指定了默认值为 "unknown",所以会返回 "unknown"


  • num_count_dict.get(num, 0) 部分
    这里使用 get 方法尝试从 num_count_dict 字典中获取键为 num 的值。num 是在循环中遍历列表时的当前数字,比如列表是 [1, 2, 1],第一次循环时 num 就是 1get 方法的第二个参数指定为 0,意味着如果 num 这个键在 num_count_dict 字典中还不存在,就返回默认值 0

例如,刚开始统计时,字典 num_count_dict 可能是空的,当第一次遇到数字 1 时,执行 num_count_dict.get(1, 0),由于字典中此时没有键为 1 的记录,所以就返回 0

  • num_count_dict.get(num, 0) + 1 部分
    不管上一步 get 方法返回的是已有的计数值(键 num 存在时)还是默认的 0(键 num 不存在时),都会在这个返回值的基础上加 1。比如前面刚说的第一次遇到数字 1 时返回了 0,那么 num_count_dict.get(1, 0) + 1 的结果就是 0 + 1 = 1

  • num_count_dict[num] = num_count_dict.get(num, 0) + 1 整体赋值部分
    最后,把经过前面计算得到的值(也就是当前数字 num 的出现次数加 1 后的结果),赋值给字典 num_count_dict 中以 num 为键的对应项。还是以第一次遇到数字 1 为例,经过前面的计算得到值为 1,现在就会执行 num_count_dict[1] = 1,相当于在字典中记录下数字 1 出现了 1 次。

如果之后在列表中又遇到了数字 1,再次执行 num_count_dict.get(1, 0) + 1 时,因为此时字典中已经有键为 1 的记录了,get 方法就会返回之前记录的次数(假设之前记录的是 1 次),返回值为 1,然后 1 + 1 = 2,再通过 num_count_dict[1] = 2 更新字典中数字 1 的出现次数为 2 次,以此类推,就可以统计出列表中每个数字出现的次数了。

查找唯一数字并返回

再次通过 for num, count in num_count_dict.items(): 循环遍历字典中的每一个键值对(其中 num 表示数字,count 表示该数字出现的次数),在循环中使用 if count == 1: 判断当前数字的出现次数是否为 1,如果是,就说明找到了那个只出现一次的唯一数字,直接返回该数字 num。如果整个循环结束都没有找到出现次数为 1 的数字,那就说明不存在这样的唯一数字,按照要求返回 None

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值