news 2026/4/20 10:57:35

Python学习3 之 【选择与循环结构】(is VS ==、split、map、range、sum与math.fsum)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python学习3 之 【选择与循环结构】(is VS ==、split、map、range、sum与math.fsum)

目录

1.选择(分支)结构

多分支

单分支与二分支

is VS ==

理解缩进​编辑

字符串优化

条件表达式

split() 函数

map() 函数

2.循环结构

for循环

range() 函数

sum() 与 math.fsum()


1.选择(分支)结构

  • 多分支

  • 单分支与二分支

is VS ==

比较项目==is
名称相等运算符身份运算符
比较内容比较两个对象的是否相等比较两个对象是否是同一个对象(内存地址)
底层判断调用对象的__eq__()方法比较id(object1) == id(object2)
返回条件值相等返回True是同一个对象返回True
None比较x == None可行,但不推荐推荐x is None
自定义类可重写__eq__自定义相等逻辑不能重写,始终比较内存地址
常用场景判断内容是否相同(如字符串、数值)判断是否是同一个对象(单例、None)
性能稍慢(可能需要遍历元素比较)极快(仅比较整数地址)

理解缩进

字符串优化

  • 条件表达式

str.split() 函数

项目说明
函数定义str.split(sep=None, maxsplit=-1)
所属类型字符串方法(String Method)
功能描述将字符串按照指定分隔符拆分成子字符串列表
返回值返回一个列表(List)
参数1:sep分隔符,默认为None(任意空白字符:空格、换行\n、制表符\t等)
input().split() 可以正确处理任意数量的空格
参数2:maxsplit最大分割次数,默认为-1(不限制次数)
是否修改原字符串不修改,字符串不可变
时间复杂度O(n),n 为字符串长度
空间复杂度O(n),存储分割后的列表
# 1. 基础用法 text = "apple,banana,orange" result = text.split(",") print(result) # ['apple', 'banana', 'orange'] # 2. 默认分隔符(空白字符) text = "hello world python" print(text.split()) # ['hello', 'world', 'python'] # 3. 限制分割次数 text = "a,b,c,d,e" print(text.split(",", 2)) # ['a', 'b', 'c,d,e'] # 4. 处理输入数据 user_input = "10 20 30 40" numbers = user_input.split() print(numbers) # ['10', '20', '30', '40'] # 5. 特殊分隔符 text = "one||two||three" print(text.split("||")) # ['one', 'two', 'three'] # 6. maxsplit=1 只分割一次 text = "x y z" print(text.split(" ", 1)) # ['x', 'y z']
情况结果
空字符串分割"".split()[]
连续分隔符"a,,b".split(",")['a', '', 'b']
分隔符在开头",a,b".split(",")['', 'a', 'b']
分隔符在结尾"a,b,".split(",")['a', 'b', '']
特性str.split()str.split(" ")
分隔符None(任意空白字符)单个空格字符" "
连续空白合并为一个分隔符每个空格都是独立分隔符
首尾空白自动忽略产生空字符串
空白类型空格、\t\n\r仅空格字符
s = "a b c" # split():连续空格被合并 print(s.split()) # ['a', 'b', 'c'] # 处理过程:a [空格] [空格] b [空格] [空格] c → 按空白块拆分 # split(" "):每个空格都是分隔符 print(s.split(" ")) # ['a', '', 'b', '', 'c'] # 处理过程:a [空格] [空格] b [空格] [空格] c → 每个空格都切一刀

map() 函数

项目说明
函数定义map(function, iterable, ...)
所属类型内置函数(Built-in Function)
功能描述将函数应用于可迭代对象的每个元素,返回迭代器
返回值返回一个map 对象(迭代器)
参数1:function要应用的函数(可以是普通函数、lambda、内置函数)
参数2:iterable一个或多个可迭代对象(列表、元组、字符串等)
惰性求值是,每次迭代时才计算下一个值
是否修改原数据不修改原可迭代对象
时间复杂度O(n),n 为可迭代对象长度
空间复杂度O(1),不一次性生成所有结果
# 1. 基本用法:将字符串转为整数 numbers = ["1", "2", "3", "4"] result = map(int, numbers) print(list(result)) # [1, 2, 3, 4] # 2. 使用 lambda 表达式 nums = [1, 2, 3, 4] squared = map(lambda x: x**2, nums) print(list(squared)) # [1, 4, 9, 16] # 3. 多个可迭代对象 a = [1, 2, 3] b = [4, 5, 6] sums = map(lambda x, y: x + y, a, b) print(list(sums)) # [5, 7, 9] # 4. 配合 split() 使用 user_input = "10 20 30 40" nums = list(map(int, user_input.split())) print(nums) # [10, 20, 30, 40] # 5. 字符串操作 words = ["hello", "world", "python"] upper_words = map(str.upper, words) print(list(upper_words)) # ['HELLO', 'WORLD', 'PYTHON'] # 6. map 对象是迭代器 m = map(int, ["1", "2", "3"]) print(next(m)) # 1 print(next(m)) # 2 print(next(m)) # 3 # print(next(m)) # StopIteration
# 经典组合:处理一行输入 data = "1 2 3 4 5" nums = list(map(int, data.split())) print(nums) # [1, 2, 3, 4, 5]
  • map()的第一个参数是函数,第二个参数是可迭代对象

  • 它会遍历可迭代对象的每个元素,对每个元素应用函数

  • 当可迭代对象是字符串时,遍历的是字符

  • 当可迭代对象是列表时,遍历的是列表元素

2.循环结构

  • for循环

range() 函数

项目说明
函数定义range(start, stop[, step])
所属类型内置函数(Built-in Function)
功能描述生成一个不可变的整数序列
返回值返回一个range 对象(可迭代对象)
参数1:start序列起始值,默认为0(包含)
参数2:stop序列结束值(不包含
参数3:step步长,默认为1,不能为0
内存占用极小,无论序列多长都只存储 start、stop、step
是否可修改❌ 不可变,range 对象不支持元素赋值
惰性求值✅ 是,每次迭代时才计算下一个值
Python 版本Python 3 返回 range 对象;Python 2 返回列表

range只计算一次边界(for i in range(3, int(num**0.5) + 1, 2),即使num修改也没事)

调用形式示例生成序列
range(stop)range(5)0, 1, 2, 3, 4
range(start, stop)range(2, 6)2, 3, 4, 5
range(start, stop, step)range(1, 10, 2)1, 3, 5, 7, 9
# 递减序列 r4 = range(10, 0, -2) print(list(r4)) # [10, 8, 6, 4, 2] r5 = range(5, 0, -1) print(list(r5)) # [5, 4, 3, 2, 1]

sum()math.fsum()

比较项目sum()math.fsum()
函数定义sum(iterable, start=0)math.fsum(iterable)
所属模块内置函数(Built-in)math模块
导入方式直接使用import math
返回值类型取决于输入类型(int/float/complex)float(总是返回浮点数)
精度普通精度,可能积累浮点误差高精度,使用 Kahan 求和算法
适用场景整数求和、对精度要求不高的浮点求和对精度要求高的浮点数求和
性能快(C 语言实现)稍慢(需额外精度处理)
空列表处理sum([])0math.fsum([])0.0
start 参数✅ 支持❌ 不支持
混合类型自动类型提升所有值都转为 float
  • 日常用sum():快、简单、够用

  • 精度要求高用math.fsum():金融、科学、大数+小数场景

numbers = [1, 2, 3, 4, 5] print(sum(numbers)) # 15 print(math.fsum(numbers)) # 15.0(返回浮点数) numbers = [1, 2, 3] print(sum(numbers, 10)) # 16(10 + 1+2+3) # math.fsum(numbers, 10) # 不支持,会报错

while循环

while 条件表达式: 循环体语句
  1. 判断条件表达式
  2. 如果为True,执行循环体
  3. 执行完循环体后,返回步骤1继续判断
  4. 如果为False,退出循环
  • else子句

while循环也可以搭配else使用,当循环正常结束(不是通过break退出)时执行else块:

# 正常结束,执行else count = 1 while count <= 3: print(count) count += 1 else: print("循环正常结束") # 输出: # 1 # 2 # 3 # 循环正常结束 # 被break中断,不执行else count = 1 while count <= 3: if count == 2: break print(count) count += 1 else: print("循环正常结束") # 输出:1(没有执行else)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 10:57:16

5个BBDown高效下载技巧:从命令行到批量处理

5个BBDown高效下载技巧&#xff1a;从命令行到批量处理 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown是一款强大的B站视频下载工具&#xff0c;专为技术用户设计的命令行式哔哩…

作者头像 李华
网站建设 2026/4/20 10:52:44

CN3322 PFM 升压型两节电池充电管理集成电路

概述&#xff1a; CN3322是一款PFM升压型两节锂电池充电管理集成电路。 CN3322采用涓流&#xff0c;恒流和准恒压模式 (Quasi-CVTM)对两节锂电池进行充电管理&#xff0c;内部集成有基准电压源&#xff0c;电感电流检测单元&#xff0c;控制电路和片外场效应晶体管驱动电路等&a…

作者头像 李华
网站建设 2026/4/20 10:51:59

齿轮箱零部件及其装配质检中的TVA技术突破(2)

前沿技术背景介绍&#xff1a;AI 智能体视觉检测系统&#xff08;Transformer-based Vision Agent&#xff0c;缩写&#xff1a;TVA&#xff09;&#xff0c;是依托 Transformer 架构与“因式智能体”算法所构建的高精度智能体。它区别于传统机器视觉与早期 AI 视觉&#xff0c…

作者头像 李华
网站建设 2026/4/20 10:48:32

别再手动调图了!Origin 图形模板与批量处理全攻略,让你效率翻倍

Origin图形模板与批量处理实战&#xff1a;告别重复劳动的高效绘图法 实验室的灯光下&#xff0c;小张盯着屏幕上第37组实验数据的图表叹了口气——这已经是本周第三次通宵调整论文插图格式了。每次导入新数据&#xff0c;他都要重新设置坐标轴范围、调整图例位置、修改颜色方…

作者头像 李华