15. Python的列表推导(List Comprehension)

《Python编程的术与道:Python语言入门》视频课程链接:https://edu.csdn.net/course/detail/27845

列表推导 (List Comprehension)

什么是列表推导?

列表推导是一种通过对迭代器中的每个元素应用表达式来构建新列表的方法。

(List comprehension is a way to build a new list by applying an expression to each item in an iterable.)

它省去了编写多行代码的麻烦,并提高代码的可读性。

列表推导的一般语法为:
15. Python的列表推导(List Comprehension)_第1张图片

下面是使用列表推导构建列表的例子:

# Example:
L = [x**2 for x in range(5)]
print(L)    
[0, 1, 4, 9, 16]

在上面的示例中,列表推导包括两个部分。
15. Python的列表推导(List Comprehension)_第2张图片

  1. 第一部分在每次迭代中收集表达式的结果,并使用它们来填写一个新列表。

  2. 第二部分在for循环中,告诉Python要进行迭代。 每次循环遍历可迭代项时,Python都会将每个单独的元素分配给一个变量x。

非数字列表推导 (Non-numerical comprehensions)

也可以使用非数字列表的推导。 在这种例子下,我们将创建一个初始列表,然后使用推导从第一个列表中创建第二个列表。

下面首先是一个不使用列表推导的的例子:

# 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子句,以从结果中过滤出元素。

如果if子句不为真,则跳过iterable的相应元素。
在这里插入图片描述

列表推导对于与包含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]

嵌套的列表推导

列表推导中的初始表达式可以是任何表达式,也可以是另一个列表推导。

15. Python的列表推导(List Comprehension)_第3张图片

例如,下面是一个简单的列表推导,它将一个嵌套列表展平为单个包含各元素的列表。

# 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]]

你可能感兴趣的:(Python语言入门,python,list,开发语言)