Python 中的列表推导如何工作?

pythonserver side programmingprogramming

在本文中,我们将学习列表推导以及 Python 中列表推导的工作原理。

什么是列表推导?

使用序列或我们可以循环遍历的另一个列表,列表推导使我们能够快速生成新列表。在 Python 中,可迭代对象是可以循环遍历的任何东西。一种称为列表推导的语法技术使我们能够从旧列表构建新列表。列表推导基于循环(或"for"循环)。任何列表推导都可以表示为 for 循环,但是当它以一行中的相等列表推导表示时,它看起来确实很独特。

列表推导 - 众所周知,python 以其简短的语法特征而闻名,列表推导使用更短的语法,有助于根据现有列表的值创建新列表。

语法

newlist = [ expression(element) for element in oldlist if condition ]

列表推导的优点

  • 与循环相比,列表推导更节省空间和时间。

  • 需要的代码行更少。

  • 它将迭代语句转换为公式。

  • 将项目附加到列表时,列表推导的执行速度比 for 循环快得多。

  • 列表推导是内置 map 和 filter 函数的绝佳替代品。

使用列表推导迭代列表

示例

以下程序使用列表推导迭代列表并创建一个新列表 −

# 使用循环和列表推导迭代列表以创建新列表
resultList = [element for element in [5, 10, 15, 20, 25]]

# 打印结果列表 1. Python 中的列表推导如何工作?
print(resultList)

输出

[5, 10, 15, 20, 25]

使用列表推导式打印奇数

示例

以下程序使用列表推导式打印所有小于 20 的奇数 −

# 获取 20 范围内的所有奇数元素(不包括)
# 使用列表推导式
OddList = [element for element in range(20) if element % 2 != 0]

# 打印所有小于 20 的奇数
print(OddList)

输出

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

使用列表推导打印矩阵

示例

以下程序使用列表推导打印 3*3 矩阵 −

# 使用列表推导创建具有 3 行 3 列的矩阵
inputMatrix = [[n for n in range(3)] for m in range(3)]

# 打印 3x3 矩阵
print(inputMatrix)

输出

执行时,上述程序将生成以下输出 -

[[0, 1, 2], [0, 1, 2], [0, 1, 2]]

列表推导与 For 循环的比较

使用 For 循环

以下程序使用 for 循环和 append() 函数创建字符串所有字符的列表 -

示例

# 创建一个空列表用于存储结果字符串字符
resultList = []
# 输入字符串
inputString = 'Tutorialspoint'
# 遍历每个字符
# 使用 for 循环输入字符串(以传统方式)
for char in inputString:
    # 将相应的字符串字符附加到结果列表中
    resultList.append(char)
# 打印上面初始化的结果列表
print(resultList)

输出

['T', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', 'p', 'o', 'i', 'n', 't']

我们使用标准方法在上述代码中迭代了列表、字符串、元组等。列表推导式执行相同的任务并使程序更具可读性。

使用 For 列表推导式

列表推导式用于简化传统的迭代方法。它通过使用 for 循环将其转换为简单的公式来实现。

示例

以下程序将演示如何使用列表推导式创建包含字符串所有字符的相同列表 −

# 迭代字符串中的每个字符
# 使用列表推导式
resultList = [char for char in 'Tutorialspoint']

# 打印包含传递的字符串的所有字符的结果列表
print(resultList)

输出

['T', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', 'p', 'o', 'i', 'n', 't']

嵌套列表推导

另一个列表推导内的列表推导称为嵌套列表推导

示例

以下程序显示了嵌套循环的实现 -

# 创建一个空列表用于存储结果矩阵
outMatrix = []
for m in range(3):
    # 将空子列表附加到上面定义的输出 tMatrix
    outMatrix.append([])
    for n in range(4):
        # 将相应元素附加到输出矩阵
        outMatrix[m].append(n)
# 打印输出矩阵
print(outMatrix)

输出

执行时,上述程序将生成以下输出 -

[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]

使用嵌套列表推导实现嵌套循环

现在可以使用嵌套列表推导用更少的代码行创建相同的结果。

示例

以下程序使用列表推导创建嵌套列表 -

# 创建一个空列表用于存储结果矩阵
# 使用嵌套列表推导实现嵌套循环
# 获取 3*4 矩阵
outMatrix = [[n for n in range(4)] for m in range(3)]
# 打印结果 3*4 矩阵
print(outMatrix)

输出

执行时,上述程序将生成以下输出 -

[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]

使用列表推导展平多维列表

假设我们需要展平二维列表。我们可以使用列表推导和子列表轻松实现这一点。

示例

以下程序显示了嵌套循环的实现 -

# 输入二维 (2D) 列表
input2DList = [[4, 6, 1], [2, 5, 3], [0, 1, 2]]
# 展平为一维列表
flattenList = [value for sublist in input2DList for value in sublist]
# 打印展平列表
print(flattenList)

输出

执行时,上述程序将生成以下输出 -

[4, 6, 1, 2, 5, 3, 0, 1, 2]

结论

本文教会了我们什么是列表推导及其优点。为了理解列表推导的工作原理,我们使用了许多示例。我们还对比了几种利用列表推导来减少代码大小的方法。为了比较有无列表推导代码,我们使用了一些比较示例。


相关文章