0
点赞
收藏
分享

微信扫一扫

PYTHON 推导式

        推导式是 Python 中一种非常简洁、优雅的语法,用于快速创建列表、字典、集合等数据结构。

什么是推导式?

推导式(Comprehension)是 Python 独有的特性,它允许你用简洁的语法基于已有的可迭代对象(如列表、元组、集合等)来创建新的数据结构。

四种主要的推导式

1. 列表推导式 (List Comprehension)

语法: [expression for item in iterable if condition]

示例:

# 创建 0-9 的平方列表
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 带条件的列表推导式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # [0, 4, 16, 36, 64]

# 使用多个循环
pairs = [(x, y) for x in range(3) for y in range(3)]
print(pairs)  # [(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2)]

2. 字典推导式 (Dictionary Comprehension)

语法: {key_expression: value_expression for item in iterable if condition}

示例:

# 创建数字到其平方的映射
squares_dict = {x: x**2 for x in range(5)}
print(squares_dict)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# 交换键值对
original = {'a': 1, 'b': 2, 'c': 3}
reversed_dict = {v: k for k, v in original.items()}
print(reversed_dict)  # {1: 'a', 2: 'b', 3: 'c'}

# 带条件的字典推导式
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares)  # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

3. 集合推导式 (Set Comprehension)

语法: {expression for item in iterable if condition}

示例:

# 创建不重复的平方数集合
squares_set = {x**2 for x in range(-5, 6)}
print(squares_set)  # {0, 1, 4, 9, 16, 25}

# 从列表中去除重复项并转换
words = ['hello', 'world', 'hello', 'python']
unique_lengths = {len(word) for word in words}
print(unique_lengths)  # {5, 6}

4. 生成器表达式 (Generator Expression)

语法: (expression for item in iterable if condition)

示例:

# 创建生成器(惰性求值,节省内存)
squares_gen = (x**2 for x in range(1000000))

# 使用生成器
for i, square in enumerate(squares_gen):
    if i >= 5:
        break
    print(square)  # 0, 1, 4, 9, 16

# 生成器表达式作为函数参数
total = sum(x**2 for x in range(10))
print(total)  # 285

嵌套推导式

推导式可以嵌套使用,但要注意可读性:

# 创建二维矩阵
matrix = [[i * j for j in range(3)] for i in range(3)]
print(matrix)  # [[0, 0, 0], [0, 1, 2], [0, 2, 4]]

# 扁平化二维列表
flat = [num for row in matrix for num in row]
print(flat)  # [0, 0, 0, 0, 1, 2, 0, 2, 4]

推导式 vs 传统循环

传统方式:

squares = []
for x in range(10):
    if x % 2 == 0:
        squares.append(x**2)

推导式方式:

squares = [x**2 for x in range(10) if x % 2 == 0]

使用建议

  1. 优点:
  • 代码更简洁
  • 通常比传统循环更快
  • 可读性更强(对于简单情况)
  1. 注意事项:
  • 避免过度复杂的推导式,否则会降低可读性
  • 对于复杂的逻辑,使用传统循环可能更清晰
  • 生成器表达式适合处理大数据集,节省内存

总结

推导式类型

语法

返回类型

列表推导式

[]

list

字典推导式

{}

dict

集合推导式

{}

set

生成器表达式

()

generator

掌握推导式可以让你的 Python 代码更加 Pythonic(符合 Python 风格)和高效!

举报

相关推荐

0 条评论