📚 Python入门到高级(知识点三)
💡 关键知识点
一、序列(切片)
1. 序列概述
序列:支持索引的容器类型,包括字符串、列表、元组。
索引规则:
- 正索引:从
0开始,从左到右依次递增 - 负索引:从
-1开始,从右到左依次递减
序列三大特征:
| 特征 | 说明 |
|---|---|
| 有序 | 元素按照一定顺序排列 |
| 索引支持 | 可以通过下标访问元素 |
| 可切片 | 支持切片操作获取子序列 |
2. 切片语法
序列名[x:y:z]
3. 切片基本操作
# 定义三种序列
s = 'abcde'
l = ['a', 'b', 'c', 'd', 'e']
t = ('a', 'b', 'c', 'd', 'e')
print(s[::]) # abcde
print(l[::]) # ['a', 'b', 'c', 'd', 'e']
print(t[::]) # ('a', 'b', 'c', 'd', 'e')
print(s[0:3:1]) # abc
print(l[0:3:1]) # ['a', 'b', 'c']
print(t[0:3:1]) # ('a', 'b', 'c')
print(s[::2]) # ace
print(l[::2]) # ['a', 'c', 'e']
print(t[::2]) # ('a', 'c', 'e')
print(s[::-1]) # edcba
print(l[::-1]) # ['e', 'd', 'c', 'b', 'a']
print(t[::-1]) # ('e', 'd', 'c', 'b', 'a')
print(s[-3:-1]) # cd
print(l[-3:-1]) # ['c', 'd']
print(t[-3:-1]) # ('c', 'd')
print(s[-2:]) # de
print(l[-2:]) # ['d', 'e']
print(t[-2:]) # ('d', 'e')
print(s[1:4]) # bcd
print(l[1:4]) # ['b', 'c', 'd']
print(t[1:4]) # ('b', 'c', 'd')
print(s[2:]) # cde
print(l[2:]) # ['c', 'd', 'e']
print(t[2:]) # ('c', 'd', 'e')
print(s[::-2]) # eca
print(l[::-2]) # ['e', 'c', 'a']
print(t[::-2]) # ('e', 'c', 'a')
print(s[3:0:-1]) # edc
print(l[3:0:-1]) # ['d', 'c', 'b']
print(t[3:0:-1]) # ('d', 'c', 'b')
4. 切片注意事项
⚠️ 重要特性:
- 切片操作不改变原序列,而是返回一个新的序列
x、y、z都可以省略,但冒号不能省略- 字符串切片返回字符串,列表切片返回列表,元组切片返回元组
- 切片是左闭右开区间
[x, y),包含x不包含y- 步长为正时,
x默认0;步长为负时,x默认-1- z默认是1
- 注意:z步长为正代表开头是0,步长为负代表开头是-1
二、推导式
1. 推导式概述
推导式:Python 中快速生成列表、集合、字典、生成器的快捷方式。
基本语法结构:
[表达式 for 变量 in 可迭代对象 if 条件]
核心三要素:
| 要素 | 说明 | 示例 |
|---|---|---|
表达式 | 对元素进行的操作 | i、i**2、i*2 |
for 变量 in 可迭代对象 | 循环遍历数据源 | for i in range(1, 11) |
if 条件(可选) | 对元素进行筛选 | if i % 2 == 0 |
2. 三种推导式对比
| 推导式类型 | 语法 | 返回类型 | 示例 |
|---|---|---|---|
| 列表推导式 | [表达式 for 变量 in 可迭代对象 if 条件] | list | [i for i in range(5)] → [0,1,2,3,4] |
| 集合推导式 | {表达式 for 变量 in 可迭代对象 if 条件} | set | {i for i in range(5)} → {0,1,2,3,4} |
| 字典推导式 | {键表达式: 值表达式 for 变量 in 可迭代对象 if 条件} | dict | {i: i**2 for i in range(5)} → {0:0, 1:1, 2:4, 3:9, 4:16} |
3. 综合代码示例
# 1. 列表推导式:生成 1 到 10
l1 = [i for i in range(1, 11)]
print(l1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 2. 列表推导式:生成 1 到 10 的偶数
l2 = [i for i in range(1, 11) if i % 2 == 0]
print(l2) # [2, 4, 6, 8, 10]
# 3. 集合推导式:生成 1 到 10
s1 = {i for i in range(1, 11)}
print(s1) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
# 4. 集合推导式:生成 1 到 10 的偶数
s2 = {i for i in range(1, 11) if i % 2 == 0}
print(s2) # {2, 4, 6, 8, 10}
# 5. 字典推导式:生成 1 到 10 的 key-value(平方)
d1 = {i: i**2 for i in range(1, 11)}
print(d1) # {1: 1, 2: 4, 3: 9, ...}
# 6. 字典推导式:生成 1 到 10 的偶数 key-value
d2 = {i: i**2 for i in range(1, 11) if i % 2 == 0}
print(d2) # {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
4. 进阶用法:多重条件与嵌套
# 1. 多重条件筛选(多个 if)
nums = [i for i in range(1, 21) if i % 2 == 0 if i % 3 == 0]
print(nums) # [6, 12, 18](既能被2整除又能被3整除)
# 2. 三元表达式 + 推导式
nums = [i if i % 2 == 0 else -i for i in range(1, 6)]
print(nums) # [-1, 2, -3, 4, -5](偶数保留,奇数取负)
# 3. 嵌套推导式(二维列表展平)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [num for row in matrix for num in row]
print(flat) # [1, 2, 3, 4, 5, 6, 7, 8, 9]