当前位置: 首页 > news >正文

Python刷题笔记1

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

定义函数find_unique_number(),参数为num_list,数字列表。
在函数内部,找出只出现一次的数字,并返回它。
如果列表只有一个数字,则返回该数字。
如果列表为空,则返回None。
如果不存在这样的数字,则返回None。

传统写法:

def find_unique_number(num_list):# 此处编写你的代码 count={}for num in num_list:count[num]=count.get(num,0)+1unique_list=[]for num,cnt in count.items():if cnt==1:unique_list.append(num)return unique_list[0] if len(unique_list)==1 else None# 将输入的整数转换为列表
numbers = list(map(int, input().split()))# 调用函数
print(find_unique_number(numbers))

代码说明:


# 将输入的整数转换为列表
numbers = list(map(int, input().split()))
input():获取用户输入字符串
.split():按空格分割字符串为列表
map(int, ...):将列表中的每个元素转换为整数
map(func, iterable) 的含义:
对第二个参数 iterable(可迭代对象)中的每个元素,使用第一个参数 func(函数)进行处理。
此处将列表中的每个字符串应用 int() 函数,尝试转为整数
list(...):将迭代器转换为列表
map 函数返回的是一个迭代器(Iterator),而不是列表。
list() 的作用是将迭代器的所有元素提取出来形成列表。完整流程总结
输入
用户输入:"1 3 5 7"
字符串分割
input().split() → 得到 ["1", "3", "5", "7"]
类型转换
map(int, ["1", "3", "5", "7"]) → 遍历转换为整数 1, 3, 5, 7
生成列表
list(...) → 生成最终列表 [1, 3, 5, 7]
结果赋值
numbers 变量被赋值为 [1, 3, 5, 7]

等效代码(用列表推导式改写)

numbers = [int(x) for x in input().split()]
对比说明:
map 在某些场景下效率更高,
而列表推导式通常可读性更好,两者最终结果相同。

列表推导式

def find_unique_number(num_list):if not num_list:return Noneif len(num_list) == 1:return num_list[0]count = {}for num in num_list:count[num] = count.get(num, 0) + 1# 根据题目条件,预期只有一个唯一值,因此返回第一个或仅有的出现一次的数值# 若存在多个出现一次的情况,根据题意返回Noneunique_numbers = [num for num, cnt in count.items() if cnt == 1]return unique_numbers[0] if len(unique_numbers) == 1 else None

代码说明:

  • 边界处理

当输入列表为空时直接返回None
当列表仅有一个元素时无需遍历,直接返回该元素

  • 统计频次

使用字典存储每个数字的出现频次,count.get(num, 0)方法确保首次访问时初始化为0
时间复杂度为O(n),可处理大规模数据

  • 精准匹配

通过列表推导式筛选出现一次的数值,存储到unique_numbers
根据题意中"列表中只有一个唯一的数字"的约束条件,仅在筛选结果数量严格为1时返回该数值,否则返回None
在这里插入图片描述
count[num] = count.get(num, 0) + 1
在这里插入图片描述
为什么要用 get(num, 0) 而不是直接访问字典?
假设直接写 count[num] + 1:

  • 如果 num 不在字典中 → 会引发 KeyError(例如首次遇到数字2时,count[2] 不存在)。
  • 使用 .get(num, 0) 可以规避此问题:当 num 不在字典中时,会安全地返回 0,使得逻辑可以正常运行。
    传统写法
count = {}
for num in num_list:if num in count:    # 如果数字已存在count[num] += 1 # 出现次数+1else:            count[num] = 1  # 首次记录1次

相关文章:

  • Golang|KVBitcask
  • springboot3 cloud gateway 配置websocket代理转发教程
  • [dp14_回文串] 分割回文串 II | 最长回文子序列 | 让字符串成为回文串的最少插入次数
  • 【JavaEE】Spring AOP的注解实现
  • Java大模型MCP服务端开发-数据库查询(智能问数)
  • 基于PLC的停车场车位控制系统的设计
  • Ubuntu 安装 NVIDIA显卡驱动、CUDA 以及 CuDNN工具
  • [ElasticSearch]Suggest查询建议(自动补全纠错)
  • 鸿蒙NEXT开发文件预览工具类(ArkTs)
  • IT运维常用的软件工具有哪些
  • iOS内存管理中的强引用问题
  • BGP(边界网关协议)
  • STM32单片机入门学习——第39节: [11-4] SPI通信外设
  • G代码中表达式赋值与变量的使用
  • ADI的BF609双核DSP怎么做开发,我来说一说(二)DDR驱动测试
  • 记录一个坑关于STM32 ARM Compiler Version
  • HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法
  • (三)谷歌Code as Policies复现(操作记录)
  • [学习] C语言数据结构深度解析:八种树结构与应用场景详解(代码示例)
  • 【MySQL学习】存储过程
  • 江西建设工程质量管理网站/最新消息今天的新闻
  • 苏州做网站优化的公司/自己建网站流程
  • 佛山网站建设报价/东莞网站建设市场
  • 供需网站开发/河北seo推广公司
  • 网站后台更新怎么做/中山排名推广
  • 国家高新技术企业认定查询官网/成都黑帽seo