# 导式是Python中一种简洁、高效的创建数据结构的方法,可以用更少的代码生成列表、字典、集合等。推导式让代码更加简洁、可读性更强,同时性能通常比传统循环更好 # 推导式的优势 # 优势 描述 示例 # 代码简洁 用一行表达式完成循环与条件判断 [x**2 for x in range(5)] # 可读性强 结构清晰,表达意图明确 比传统for循环更直观 # 性能优越 通常比循环+append更快 底层优化实现 # 功能丰富 支持条件过滤、嵌套循环等 复杂数据处理 # 2.2.推导式类型 # 类型 语法 结果类型 示例 # 列表推导式 [expr for item in iterable] list [x**2 for x in range(5)] # 字典推导式 {key: value for item in iterable} dict {x: x**2 for x in range(5)} # 集合推导式 {expr for item in iterable} set {x**2 for x in range(5)} # 生成器表达式 (expr for item in iterable) generator (x**2 for x in range(5)) # 基本语法 # [表达式 for 变量 in 可迭代对象 (可选的if条件)] # 组成部分: # 表达式:对每个元素进行处理的代码 # for 变量 in 可迭代对象:遍历数据源 # if 条件:可选的过滤条件 # 列表推导式 squares = [x**2 for x in range(5)] print(squares) # [0, 1, 4, 9, 16] # 带条件 # 只包含偶数的平方 even_squares = [x**2 for x in range(10) if x % 2 == 0] print(even_squares) # [0, 4, 16, 36, 64] # 多个条件 numbers = [x for x in range(20) if x % 2 == 0 if x % 3 == 0] print(numbers) # [0, 6, 12, 18] # 条件表达式(三元运算符) results = [x if x % 2 == 0 else "odd" for x in range(5)] print(results) # [0, 'odd', 2, 'odd', 4] # 嵌套循环 # 二维列表展开 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flattened = [num for row in matrix for num in row] print(flattened) # [1, 2, 3, 4, 5, 6, 7, 8, 9] # 等价于: flattened = [] for row in matrix: for num in row: flattened.append(num) # 创建乘法表 multiplication_table = [[i * j for j in range(1, 6)] for i in range(1, 6)] print(multiplication_table) # [[1, 2, 3, 4, 5], # [2, 4, 6, 8, 10], # [3, 6, 9, 12, 15], # [4, 8, 12, 16, 20], # [5, 10, 15, 20, 25]] # 字典推导式 # {键表达式: 值表达式 for 变量 in 可迭代对象 (可选的if条件)} # 最基础的字典推导式 d = {x: x**2 for x in range(5)} print(d) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} # 带条件的字典推导式 d = {x: x**2 for x in range(5) if x % 2 == 0} print(d) # {0: 0, 2: 4, 4: 16} # 集合推导式 # {表达式 for 变量 in 可迭代对象 (可选的if条件)} # 创建唯一平方数的集合 squares_set = {x**2 for x in range(-5, 6)} print(squares_set) # {0, 1, 4, 9, 16, 25} # 从列表去重 words = ["hello", "world", "hello", "python", "world"] unique_words = {word for word in words} print(unique_words) # {'hello', 'world', 'python'} # 带条件的集合推导式 even_squares = {x**2 for x in range(10) if x % 2 == 0} print(even_squares) # {0, 64, 4, 36, 16} # 生成器表达式 # (表达式 for 变量 in 可迭代对象 (可选的if条件)) # 生成器表达式 squares_gen = (x**2 for x in range(5)) print(squares_gen) # at 0x...> # 转换为列表 print(list(squares_gen)) # [0, 1, 4, 9, 16] # 带条件的生成器表达式 even_squares_gen = (x**2 for x in range(10) if x % 2 == 0) print(list(even_squares_gen)) # [0, 4, 16, 36, 64] # 多层嵌套推导式 # 三维嵌套列表展平 three_d = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] flattened_3d = [num for matrix in three_d for row in matrix for num in row] print(flattened_3d) # [1, 2, 3, 4, 5, 6, 7, 8] # 使用字典推导式创建嵌套字典 nested_dict = { f"group_{i}": {f"item_{j}": i * j for j in range(1, 4)} for i in range(1, 4) } print(nested_dict) # {'group_1': {'item_1': 1, 'item_2': 2, 'item_3': 3}, # 'group_2': {'item_1': 2, 'item_2': 4, 'item_3': 6}, # 'group_3': {'item_1': 3, 'item_2': 6, 'item_3': 9}} # 复杂条件逻辑 # 复杂条件筛选 numbers = range(20) complex_filter = [ x for x in numbers if (x % 2 == 0 and x < 10) or (x % 3 == 0 and x > 10) ] print(complex_filter) # [0, 2, 4, 6, 8, 12, 15, 18] # 使用函数进行复杂判断 def is_prime(n): if n < 2: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True # 筛选素数 primes = [x for x in range(2, 30) if is_prime(x)] print(primes) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] numbers = [1, 2, 4] abc = list(map(lambda x: x * 2, numbers)) print(abc)