Python 中的列表理解是如何工作的
在这篇文章中,我们将学习Python中的列表理解和列表理解的工作。
什么是列表理解
使用一个序列或另一个我们可以循环的列表,列表理解使我们能够迅速地生成新的列表。在 Python 中,可迭代的东西是可以被循环的。一种叫做列表理解的语法技术使我们有可能从旧的列表中建立新的列表。列表理解是基于循环 (或 “for” 循环) 的。任何列表理解都可以表示为for循环,但是当它被表示为单行的等价列表理解时,它看起来真的很独特。
列表理解 – 我们都知道,Python以其短小的语法特点而闻名,List Comprehension使用更短的语法,帮助创建一个基于现有列表值的新列表。
语法
newlist = [ expression(element) for element in oldlist if condition ]
列表理解的优势
- 与循环相比,列表理解法更节省空间和时间。
-
需要更少的代码行。
-
它将迭代语句转换为公式。
-
当向一个列表追加项目时,列表理解法比for-loops快得多。
-
列表理解是对内置的map和filter函数的一个很好的替代。
使用列表理解法对列表进行迭代
示例
# iterating through the list using loop and list comprehension to create new list
resultList = [element for element in [5, 10, 15, 20, 25]]
# printing the resultant list 1. How do list comprehensions in Python work?
print(resultList)
输出
[5, 10, 15, 20, 25]
使用列表理解法打印奇数
示例
下面的程序使用列表理解法打印出20以下的所有奇数 –
# getting all the odd elements in a range of 20(excluded)
# using list comprehension
OddList = [element for element in range(20) if element % 2 != 0]
# printing all the odd numbers below 20
print(OddList)
输出
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
使用列表理解法打印矩阵
示例
下面的程序使用列表理解法打印3*3的矩阵——。
# creating matrix with 3 rows and 3 columns using list comprehension
inputMatrix = [[n for n in range(3)] for m in range(3)]
# printing the 3x3 matrix
print(inputMatrix)
输出
在执行时,上述程序将产生以下输出 –
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]
列表理解与For Loop的比较
使用For Loop
下面的程序使用for循环和append()函数创建了一个字符串的所有字符的列表 –
示例
# creating an empty list for storing resultant string characters
resultList = []
# input string
inputString = 'Tutorialspoint'
# traversing in each character of the
# input string using for loop(in a Traditional way)
for char in inputString:
# appending corresponding string character to the resultant list
resultList.append(char)
# printing the resultant list which is initialized above
print(resultList)
输出
['T', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', 'p', 'o', 'i', 'n', 't']
在上面的代码中,我们使用标准方法对列表、字符串、元组等进行了迭代。列表理解执行相同的任务,并使程序更具可读性。
用于清单理解
列表理解法用于简化传统的迭代方法。它通过使用for循环转换为一个简单的公式来实现。
示例
# iterating through each character in a string
# using list comprehension
resultList = [char for char in 'Tutorialspoint']
# printing the result list containing all the characters
# of a string passed
print(resultList)
输出
['T', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', 'p', 'o', 'i', 'n', 't']
嵌套列表的理解
在另一个列表理解中的一个列表理解被称为嵌套列表理解
示例
下面的程序显示了嵌套循环的实现—-。
# creating an empty list for storing the result matrix
outMatrix = []
for m in range(3):
# appending an empty sublist to the above-defined output tMatrix
outMatrix.append([])
for n in range(4):
# appending corresponding element to the output Matrix
outMatrix[m].append(n)
# printing the output matrix
print(outMatrix)
输出
在执行时,上述程序将产生以下输出——。
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
使用嵌套列表实现嵌套循环的理解力
现在,通过使用嵌套的列表理解,可以用更少的代码创建相同的结果。
示例
# creating an empty list for storing the result matrix
# implementing nested loop using Nested list comprehension
# getting a 3*4 matrix
outMatrix = [[n for n in range(4)] for m in range(3)]
# printing the resultant 3*4 matrix
print(outMatrix)
输出
在执行时,上述程序将产生以下输出 –
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
使用列表理解对多维列表进行扁平化处理
假设我们需要对一个二维列表进行扁平化处理。我们可以用List Comprehension和一个子列表轻松完成这个任务。
示例
下面的程序显示了嵌套循环的实现—-。
# input 2-dimensional(2D) list
input2DList = [[4, 6, 1], [2, 5, 3], [0, 1, 2]]
# flattening to a one-dimensional list
flattenList = [value for sublist in input2DList for value in sublist]
# printing the flattened list
print(flattenList)
输出
在执行时,上述程序将产生以下输出 –
[4, 6, 1, 2, 5, 3, 0, 1, 2]
结论
这篇文章让我们了解了什么是列表式理解,以及它们的优势。为了了解列表理解的工作原理,我们使用了一些例子。我们还对比了几种利用列表理解来减少代码大小的方法。为了比较有列表理解和无列表理解的代码,我们使用了一些对比样本。