《Python编程的术与道:Python语言入门》视频课程链接:https://edu.csdn.net/course/detail/27845
列表推导是一种通过对迭代器中的每个元素应用表达式来构建新列表的方法。
(List comprehension is a way to build a new list by applying an expression to each item in an iterable.)
它省去了编写多行代码的麻烦,并提高代码的可读性。
下面是使用列表推导构建列表的例子:
# Example:
L = [x**2 for x in range(5)]
print(L)
[0, 1, 4, 9, 16]
第一部分在每次迭代中收集表达式的结果,并使用它们来填写一个新列表。
第二部分在for循环中,告诉Python要进行迭代。 每次循环遍历可迭代项时,Python都会将每个单独的元素分配给一个变量x。
也可以使用非数字列表的推导。 在这种例子下,我们将创建一个初始列表,然后使用推导从第一个列表中创建第二个列表。
下面首先是一个不使用列表推导的的例子:
# Consider some students.
students = ['bernice', 'aaron', 'cody']
# Let's turn them into great students.
great_students = []
for student in students:
great_students.append(student.title() + " the great!")
# Let's greet each great student.
for great_student in great_students:
print("Hello, " + great_student)
Hello, Bernice the great!
Hello, Aaron the great!
Hello, Cody the great!
要在代码中使用列表推导,要编写如下内容:
great_students = [add ‘the great’ to each student, for each student in the list of students]
# Consider some students.
students = ['bernice', 'aaron', 'cody']
# Let's turn them into great students. 使用列表推导!
great_students = [student.title() + " the great!" for student in students]
# Let's greet each great student.
for great_student in great_students:
print("Hello, " + great_student)
Hello, Bernice the great!
Hello, Aaron the great!
Hello, Cody the great!
下面是应该使用列表推导的原因:
列表推导的编写更加简洁,因此在许多情况下它们非常有用。
由于列表推导是一个表达式,因此可以在需要表达式的任何地方使用它(例如,在return语句中作为函数的参数)。
列表推导的运行速度比手动执行循环语句快得多(大约快两倍)。 它具有性能优势,尤其是对于较大的数据集。
列表推导可能具有可选的if子句,以从结果中过滤出元素。
列表推导对于与包含if语句的for循环也是如此操作:
# Example: Filter list to exclude negative numbers
vec = [-4, -2, 0, 2, 4]
L = [x for x in vec if x >= 0]
print(L) # [0, 2, 4]
[0, 2, 4]
不使用列表推导时:
# Example:
vec = [-4, -2, 0, 2, 4]
L = []
for x in vec:
if x >= 0:
L.append(x)
print(L) # [0, 2, 4]
[0, 2, 4]
列表推导中的初始表达式可以是任何表达式,也可以是另一个列表推导。
例如,下面是一个简单的列表推导,它将一个嵌套列表展平为单个包含各元素的列表。
# Example: Flatten a nested list with list comprehension
vector = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
L = [number for list in vector for number in list]
print(L)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
# It is equivalent to the following plain, old nested loop:
vector = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
L = []
for list in vector:
for number in list:
L.append(number)
print(L) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
下面是另一个列表推导,可以对行和列进行转置。
# Example: Transpose a matrix with list comprehension
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
L = [[row[i] for row in matrix] for i in range(3)]
print(L)
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]