Python基础语法练习题(37-39)
今天也来同步更新关于Python的几道练习题。第三十七题交换列表首尾元素#定义一个函数该函数接受一个列表newList作为参数。函数的功能是交换列表的第一个元素和最后一个元素并返回交换后的列表。 #定义函数 def swap_first_last(newList): 交换列表的第一个元素和最后一个元素 :param newList: 列表 :return: 交换后的列表 newList[0], newList[-1] newList[-1], newList[0] return newList #交换列表元素 Li1 [1,2,3] Li2 [a,b,c,d,e] #调用函数 print(swap_first_last(Li1)) print(swap_first_last(Li2))这个代码块的思维如下交换列表的首尾元素题目要求把列表的第一个元素和最后一个元素换个位置中间的不动。比如 1、2、3 变成 3、2、1a、b、c、d、e 变成 e、b、c、d、a。核心思路两个位置直接对调不用第三个杯子很多人会想得先找个地方把第一个数存起来不然一覆盖就丢了。其实 Python 支持在同一行同时给两个位置赋值先把右边两个值一起记住再分别塞回左边。就像两只手在空中同时交换东西落地时已经互换了归属不需要第三只手。取最后一项用的是负数下标-1 就代表最后一个元素比先算长度再减一省事得多。举个例子函数拿到 1、2、3看一眼首项是 1、末项是 3对调后就地变成 3、2、1再返回打印。a 到 e 那组同理。一个细节这个函数改的是传进去的列表本身不是副本。调用完 Li1、Li2 就已经变了。对本题没影响但要记住就地修改之后原始数据就没了想保留得先复制一份。另外空列表去取首项会报错最好先判断一下只有一个元素时是自己跟自己换结果不变也不报错。小结精髓是同时赋值一行对调不用临时变量也不用关心列表长度。当然也能用中间变量三步走或弹出再插入结果都对只是更啰嗦。最后提醒若题目改成整个列表倒过来就得用反转或切片交换首尾解决不了。第三十八题交换列表指定位置元素# 定义一个函数该函数用于将指定列表中指定索引位置的元素互换 # 定义函数 def swap_positions(newList, pos1, pos2): 交换列表中指定索引位置的两个元素 :param newList: 列表 :param pos1: 第一个元素的索引位置 :param pos2: 第二个元素的索引位置 :return: 交换后的列表 newList[pos1], newList[pos2] newList[pos2], newList[pos1] return newList # 交换列表元素 Li1 [23, 65, 19, 90] # 用户输入指定要交换的两个索引位置 pos1 int(input(请输入第一个索引位置(选择数字0-3))) pos2 int(input(请输入第二个索引位置(选择数字0-3))) # 调用函数 print(swap_positions(Li1, pos1, pos2))这个代码块的思维如下交换列表指定位置的元素题目要求给一个列表和两个位置编号把这两个位置上的元素互换其他元素不动。比如 23、65、19、90指定位置 0 和 2换完就是 19、65、23、90。核心思路把位置也变成参数交换动作完全一样上一题是固定的首尾这一题的难点其实不在交换而在位置由外面传进来。函数多收了两个参数 pos1、pos2交换那一行只是把写死的 0 和 -1 换成了这两个变量。同时赋值的道理没变先把右边两个值一起记住再分别塞回左边两只手在空中同时交换不需要第三个杯子。这里还多做了一步——用 input 让用户自己输入位置并且用 int 把输入的字符串转成数字。这个转换不能省因为 input 拿到的永远是文字0 和 2 不转成数字就没法当下标用。举个例子列表是 23、65、19、90用户输入 0 和 2。函数取出位置 0 的 23 和位置 2 的 19对调后列表就地变成 19、65、23、90再返回打印。几个细节第一下标从 0 开始数所以四个元素的位置是 0、1、2、3这也是提示语写0-3的原因初学者很容易按 1 开始数而错位。第二函数改的还是传进去的列表本身不是副本调用完 Li1 就变了。第三边界情况输入的编号超出范围比如 5 或 -6会直接报错输入的不是数字也会报错两个位置输成一样的则是自己跟自己换结果不变但不会出错。想更稳的话可以在调用函数前先判断一下编号是否合法不合法就提示重输。小结精髓是把位置参数化交换逻辑和上一题一模一样只是把固定下标换成变量再配上输入与类型转换就成了一道通用题。也可以写成用中间变量三步走结果相同只是更啰嗦。往后如果遇到按位置批量调整顺序的需求思路仍然是这套——先确定位置再对调。第三十九题统计列表中元素出现的次数#定义一个函数该函数用于统计列表中元素出现次数 # 方法一统计列表中指定元素出现的次数 #定义函数 def count_occurrences(lst, element): 统计列表中元素出现次数 :param lst: 列表 :param element: 元素 :return: 元素在列表中出现的次数 count 0 for i in lst: if i element: count 1 return count #给定列表 Li [1,4,3,3,2,2,3,5,3,1] print(count_occurrences(Li, 3)) # 方法二统计列表中所有元素出现的次数 # 定义函数 def count_all_occurrences(lst): 统计列表中所有元素出现的次数 :param lst: 列表 :return: 字典键为元素值为该元素出现的次数 result {} for i in lst: # 元素第一次出现时 get 返回默认值 0再 1 累计 result[i] result.get(i, 0) 1 return result # 给定列表 Li [1, 4, 3, 3, 2, 2, 3, 5, 3, 1] # 统计并展示所有元素出现的次数 counts count_all_occurrences(Li) for element, count in counts.items(): print(f元素 {element} 出现了 {count} 次) # 方法三统计列表中所有元素出现的次数复用方法一 def count_all_occurrences(lst): 统计列表中所有元素出现的次数 :param lst: 列表 :return: 字典键为元素值为该元素出现的次数 result {} for element in set(lst): # set 去重遍历每个不同元素 result[element] count_occurrences(lst, element) # 复用原函数 return result # 方法四使用 collections.Counter 统计列表中所有元素出现的次数 # from collections import Counter # def count_all_occurrences(lst): # return dict(Counter(lst)) # Li [1, 4, 3, 3, 2, 2, 3, 5, 3, 1] # print(count_all_occurrences(Li)) # {1: 2, 4: 1, 3: 4, 2: 2, 5: 1}这个代码块的思维如下统计列表中元素出现次数题目要求给一个列表统计某个元素在里面出现了几次再进一步把列表里每个元素各出现多少次都算出来。比如列表 1、4、3、3、2、2、3、5、3、1问 3 出现几次答案是 4 次问全部就是 1 出现 2 次、4 出现 1 次、3 出现 4 次、2 出现 2 次、5 出现 1 次。核心思路从数一个到数全部四种写法层层递进 这道题代码里给了四种方法其实是同一个问题的四种解法。方法一最朴素定义 count_occurrences接收列表和一个目标元素用一个计数器 count 从 0 开始遍历列表每遇到一个相等的就加 1最后返回。方法二要数全部元素关键在那一行 result[i] result.get(i, 0) 1——用字典存结果get 的妙处是元素第一次出现时返回默认值 0避免直接写 result[i] 因为键不存在而报错。方法三换了个角度先用 set 去重得到所有不同元素再对每个元素调用方法一的函数属于复用旧代码。方法四则直接搬出标准库 collections.Counter一行搞定是最省事的生产写法。举个例子 列表是 1、4、3、3、2、2、3、5、3、1。方法一数 3遍历一遍遇到 4 个 3返回 4。方法二从头扫字典随着遍历慢慢填充成 {1:2, 4:1, 3:4, 2:2, 5:1}再用 for 循环配 items() 一条条打印成元素 X 出现了 Y 次。几个细节 第一方法二里的 get(i, 0) 不能省成 result[i]否则第一次遇到新元素会直接报 KeyError。第二方法三和方法二函数同名 count_all_occurrences后定义的会覆盖前面的这在同一个文件里要注意实际只会保留最后一个生效。第三方法三用 set 去重后遍历次数更少但每次数一个元素都要把整个列表再扫一遍数据量大时反而更慢方法二只扫一遍效率更高。第四方法四被整段注释掉了Counter 返回的是特殊对象代码里用 dict() 把它转成普通字典结果和方法二完全一样。第五 比较的是值所以数字、字符串都能正确统计。小结 精髓是计数器思想 字典存结果先学会数一个元素再用字典的 get 技巧把结果收集起来数全部最后知道有 Counter 这种现成轮子。四种方法从手写到底层库正好体现了 Python 解决问题由繁到简的过程。往后遇到分组统计词频统计这类需求思路都是这套——遍历一次边看边记用字典把每个键对应的次数累加起来。上面就是关于37-39这三题的一些内容记录。

相关新闻

OpenRig rig heartbeat与watchdog:让Agent团队自己盯自己的健康守护

OpenRig rig heartbeat与watchdog:让Agent团队自己盯自己的健康守护

OpenRig rig heartbeat与watchdog:让Agent团队自己盯自己的健康守护 【免费下载链接】openrig Multi-agent harness that runs Claude Code and Codex together as one system 项目地址: https://gitcode.com/GitHub_Trending/op/openrig OpenRig 是一个多 A…

2026/10/1 16:02:31 阅读更多 →
多微电网优化调度MATLAB实现:混合整数规划与工程实践

多微电网优化调度MATLAB实现:混合整数规划与工程实践

做多微电网优化调度这个方向也有些年头了。从最早写单微网经济调度,到后面处理多微电网与配电网的协同优化,我手头的MATLAB代码迭代了好几轮。最近整理出一套比较完整的多微电网优化调度代码,想着趁这次把设计思路、数学模型、代码结构和调试…

2026/10/1 16:02:31 阅读更多 →
基于Python的深度学习实战:从环境配置到模型训练踩坑指南

基于Python的深度学习实战:从环境配置到模型训练踩坑指南

简介:这份《基于Python的深度学习实战》资源包面向准备毕业设计或希望系统入门深度学习的开发者,覆盖从神经网络基础、CNN/RNN/LSTM原理到图像识别、情感分析、文字生成、推荐系统、时间序列预测等完整实战链条。压缩包共30个文件,包含16个ip…

2026/10/1 16:01:31 阅读更多 →

最新新闻

白盒测试报告不是填空题:从CAN硬件测试看结构化思维落地

白盒测试报告不是填空题:从CAN硬件测试看结构化思维落地

1. 这份模板不是“填空题”,而是白盒测试工程师的思维脚手架“白盒测试实验报告模板”——光看标题,很多人第一反应是:又一个要交差的文档格式?Word里套个表格,把代码覆盖率填进去,加几行“测试通过”就完事…

2026/10/1 19:01:57 阅读更多 →
响应时间:性能指标的最终裁决者——从原理到排查优化实战

响应时间:性能指标的最终裁决者——从原理到排查优化实战

半夜两点被值班电话叫醒,用户语气已经很急躁:“后台能登进去,但页面上所有的操作都像挂了,点一个按钮转圈十几秒。”我打开监控面板,第一件事看的就是性能指标里的响应时间曲线。别的指标都还能争辩两句——CPU高也许是…

2026/10/1 19:01:57 阅读更多 →
上下文工程实战:解决长对话中大模型失忆与上下文膨胀问题

上下文工程实战:解决长对话中大模型失忆与上下文膨胀问题

1. 当提示词开始失效:我在长对话里撞上的"失忆"问题 先说一个真实场景。几个月前我在做一个行业调研分析项目,为了让大模型帮我梳理一整条产业链,我在单次会话里陆续贴了几十份报告片段、访谈纪要、政策文件和历史对话结论。前二十…

2026/10/1 19:01:57 阅读更多 →
风格化渲染系统:从NPR管线到美术可编程的五层架构

风格化渲染系统:从NPR管线到美术可编程的五层架构

1. 风格化渲染不是“加滤镜”,而是重建视觉语法 “一个风格化渲染系统”——这七个字在图形学、游戏开发、影视后期甚至AIGC工具链里,早已不是新鲜词。但绝大多数人第一次接触它时,下意识反应是:“哦,就是给画面套个油…

2026/10/1 19:01:57 阅读更多 →
从零搭建AI工程能力:环境管理、模型推理优化与服务化部署实战

从零搭建AI工程能力:环境管理、模型推理优化与服务化部署实战

1. 从零搭建AI工程能力,为什么大多数人卡在第一步就放弃了 如果你最近在技术社区里频繁看到“ai-engineering-from-scratch”这个说法,不用怀疑,它不是什么新出的框架或者工具库,而是一种越来越多人认可的学习路径——从最底层开始…

2026/10/1 19:01:57 阅读更多 →
MCP实战:用AI构建Excel自动化处理服务

MCP实战:用AI构建Excel自动化处理服务

每天跟Excel打交道的朋友应该都有这种体会:处理报表本身不是最费时间的,费时间的是那些重复性的操作——打开表格、定位列、写公式、复制粘贴、再生成新表。尤其是当数据源有变动、格式不统一的时候,整个人都会烦躁起来。 我最近用MCP&#…

2026/10/1 19:00:57 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →