Python 列表推导式提供了一种简洁的编写代码方式,它允许您同时计算表达式的值并将其赋值给变量。使用 walrus 运算符(:=),我们可以优化代码:
square_cubes = [res if (res := n**2) % 9 == 0 or res % 4 == 0 else n**3 for n in range(1, 11)] print(square_cubes) # 输出: [1, 4, 9, 16, 125, 36, 343, 64, 81, 100]
这里,我们将 res
变量存储计算结果 n**2
,并在后续代码中复用,避免重复计算。
列表推导式支持嵌套循环,for
循环数量没有限制。但需注意,循环顺序需与原始代码一致。每个 for
循环后还可以添加可选的 if
条件。嵌套 for
循环的列表推导式结构如下:
[ <表达式> for <元素a> in <可迭代对象a> (可选 if <条件a>) for <元素b> in <可迭代对象b> (可选 if <条件b>) for <元素c> in <可迭代对象c> (可选 if <条件c>) ... ]
以下示例演示了嵌套循环的列表推导式,用于生成乘法表:
multiplications = [] for i in range(1, 4): for n in range(1, 11): multiplications.append(i*n) print(multiplications) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
将其转换为列表推导式:
multiplications = [i*n for i in range(1,4) for n in range(1,11)] print(multiplications) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
列表推导式还可以用于扁平化嵌套列表:
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] flatten = [n for row in matrix for n in row] print(flatten) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
嵌套列表推导式与嵌套循环的列表推导式不同。前者是推导式内部嵌套推导式,后者是循环内部嵌套循环。例如,矩阵转置:
使用普通循环:
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] transpose = [] for i in range(4): temp = [] for row in matrix: temp.append(row[i]) transpose.append(temp) print(transpose) # 输出: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
使用嵌套列表推导式:
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] transpose = [[row[n] for row in matrix] for n in range(4)] print(transpose) # 输出: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
列表推导式的概念也适用于集合和字典推导式。字典用于存储键值对:
squares_cubes = {n: n**2 if n%2 == 0 else n**3 for n in range(1,11)} print(squares_cubes) # 输出: {1: 1, 2: 4, 3: 27, 4: 16, 5: 125, 6: 36, 7: 343, 8: 64, 9: 729, 10: 100}
集合推导式用于创建无序集合:
import random non_multiples = {n for n in random.sample(range(0, 1001), 20) if n not in range(0, 1001, 9)} print(non_multiples) # 输出 (示例): {3, 165, 807, 574, 745, 266, 616, 44, 12, 910, 336, 145, 755, 179, 25, 796, 926}
本文介绍了 Python 列表推导式及其在代码优化中的应用,包括嵌套循环、嵌套推导式以及集合和字典推导式。 需要注意的是,对于复杂的嵌套循环,为了提高代码可读性,可以将列表推导式拆分成多行。 建议根据实际情况选择合适的方法,兼顾代码效率和可读性。
以上是列出Python中的综合的详细内容。更多信息请关注PHP中文网其他相关文章!