Python入门到高级(知识点三)

0 阅读4分钟

📚 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. 切片注意事项

⚠️ 重要特性

  • 切片操作不改变原序列,而是返回一个新的序列
  • xyz 都可以省略,但冒号不能省略
  • 字符串切片返回字符串列表切片返回列表元组切片返回元组
  • 切片是左闭右开区间 [x, y),包含 x 不包含 y
  • 步长为正时,x 默认 0;步长为负时,x 默认 -1
  • z默认是1
  • 注意:z步长为正代表开头是0,步长为负代表开头是-1

二、推导式

1. 推导式概述

推导式:Python 中快速生成列表、集合、字典、生成器的快捷方式。

基本语法结构

[表达式 for 变量 in 可迭代对象 if 条件]

核心三要素

要素说明示例
表达式对元素进行的操作ii**2i*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]