Python中的列表推导式是如何工作的?
在本文中,我们将学习Python中的列表推导式以及列表推导式的工作原理。
什么是列表推导式?
使用我们可以循环的序列或另一个列表,列表推导式使我们能够快速生成新列表。在Python中,可迭代对象是任何可进行循环操作的对象。一种称为列表推导式的句法技术可以基于旧列表构建新列表。列表推导式基于循环(或“for”循环)。任何列表推导式都可以表示为for循环,但当它在单行等式列表推导式中表示为等式时,它看起来非常独特。
列表推导式 - 众所周知Python以其简短的语法特性而著称,列表推导式使用更短的语法来创建基于现有列表的值的新列表。
语法
newlist = [expression(element) for element in oldlist if condition]
列表推导式的优点
- 与循环相比,列表推导式更节省空间和时间。
-
需要较少的代码行。
-
它将迭代语句转换为公式。
-
当追加项目到列表时,列表推导式比for循环更快。
-
列表推导式是内置的map和过滤函数的很好替代。
使用列表推导循环遍历列表
例子
以下程序使用列表推导式遍历列表并创建新列表-
#遍历循环并使用列表推导式创建新列表
resultList = [element for element in [5, 10, 15, 20, 25]]
#打印生成的列表
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)]
#打印3 x 3矩阵
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循环转换为简单的公式来实现。
示例
以下程序将演示如何使用列表推导创建与字符串中所有字符相同的列表-
# 使用列表推导遍历字符串中的每个字符
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]
结论
本文教我们什么是列表推导及其优点。为了理解列表推导式的工作原理,我们使用了许多示例。我们还对几种利用列表推导式减少代码大小的方法进行了对比。我们使用一些比较示例进行了对比,以比较有和无列表推导的代码。