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

张开发
2026/4/20 10:57:36 15 分钟阅读
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(sepNone, maxsplit-1)所属类型字符串方法String Method功能描述将字符串按照指定分隔符拆分成子字符串列表返回值返回一个列表List参数1sep分隔符默认为None任意空白字符空格、换行\n、制表符\t等input().split() 可以正确处理任意数量的空格参数2maxsplit最大分割次数默认为-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. maxsplit1 只分割一次 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 对象迭代器参数1function要应用的函数可以是普通函数、lambda、内置函数参数2iterable一个或多个可迭代对象列表、元组、字符串等惰性求值是每次迭代时才计算下一个值是否修改原数据不修改原可迭代对象时间复杂度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 对象可迭代对象参数1start序列起始值默认为0包含参数2stop序列结束值不包含参数3step步长默认为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, 4range(start, stop)range(2, 6)2, 3, 4, 5range(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, start0)math.fsum(iterable)所属模块内置函数Built-inmath模块导入方式直接使用import math返回值类型取决于输入类型int/float/complexfloat总是返回浮点数精度普通精度可能积累浮点误差高精度使用 Kahan 求和算法适用场景整数求和、对精度要求不高的浮点求和对精度要求高的浮点数求和性能快C 语言实现稍慢需额外精度处理空列表处理sum([])→0math.fsum([])→0.0start 参数✅ 支持❌ 不支持混合类型自动类型提升所有值都转为 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)) # 1610 123 # math.fsum(numbers, 10) # 不支持会报错while循环while 条件表达式: 循环体语句判断条件表达式如果为True执行循环体执行完循环体后返回步骤1继续判断如果为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

更多文章