目录
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([])→0 | math.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 条件表达式: 循环体语句- 判断条件表达式
- 如果为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)