编写一个程序,用于在一组整数中找出唯一的数字。假设列表中只有一个唯一的数字。
-
定义函数
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
就是1
。get
方法的第二个参数指定为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
。