前言
Python以其简洁、易学、强大的库和生态系统、兼容性和可扩展性等优势,成为了一门受欢迎的编程语言,并广泛应用于各个领域。Python也被认为是一门易学的编程语言,初始上手容易,且对初学者友好。今天我们一起来进阶下------列表推导式。
列表推导式概念
列表推导式是一种简洁而强大的语法结构,用于创建和操作列表。它允许你使用一行代码生成一个新的列表,该列表基于现有列表(或其他可迭代对象)的元素,并可以通过应用条件和转换操作来筛选或修改这些元素。它是Python语言特有的一种语法结构,也可以看成独特的数据处理方式。
列表推导式的优点
熟练掌握推导式的写法可以极大的提高开发效率,节省时间,前提是对for循环熟悉掌握。
列表推导式语法结构
new_list = [expression for item in iterable if condition]
其中:
expression 是应用于 item 的操作或表达式,用于确定新列表中每个元素的形式。
item 是可迭代对象(如列表、元组、字符串等)中的每个元素。
iterable 是被迭代的对象(如列表、元组、集合等)。
condition 是一个可选的条件,用于过滤元素并确定是否将其包含在新列表中。(if condition可省略)
列表推导式基础实例
- 筛选出列表中的偶数
for循环写法:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = []
for num in numbers:
if num % 2 == 0:
even_numbers.append(num)
列表推导式写法:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [num for num in numbers if num % 2 == 0]
可以看到,列表推导式提供了一种更简洁和直观的写法,一行代码即可完成与常规for循环相同的功能。该列表推导式的意思仍然是:对于numbers中的每个数值num,如果num能够被2整除,则将num变量(上述表达式第一个num)添加到列表even_numbers中。最终的结果是even_numbers包含了numbers列表中所有满足条件(即偶数)的元素。
- 从字符串列表中提取长度大于等于5的单词
for循环写法:
words = ['apple', 'banana', 'cherry', 'date', 'elderberry']
long_words = []
for word in words:
if len(word) >= 5:
long_words.append(word)
列表推导式写法:
words = ['apple', 'banana', 'cherry', 'date', 'elderberry']
long_words = [word for word in words if len(word) >= 5]
- 练习题--------创建一个包含平方数的列表
for循环写法:
squares = []
for x in range(1, 11):
squares.append(x**2)
列表推导式写法:(试着自己写下)
答案在评论区
列表推导式的多层嵌套
除了这些基本用法外,列表推导式还可以嵌套、包含多个迭代器、使用多个条件等等。它提供了一种简洁而可读性高的方式来操作和转换列表。然而,在使用列表推导式时,确保代码的可读性和易理解性是很关键的,尤其是当推导式逻辑较为复杂时。
1. 嵌套的列表推导式:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
在这个例子中,我们有一个二维矩阵 matrix,它由三个内部列表组成。我们想要将这个二维矩阵展平为一个一维列表。
通过使用嵌套的列表推导式,我们可以使用两个 for 循环来迭代矩阵中的行和行中的元素,然后将每个元素添加到新的列表 flattened 中。
这段代码等效于以下的常规嵌套 for 循环的写法:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = []
for row in matrix:
for num in row:
flattened.append(num)
2. 包含多个迭代器的列表推导式:
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
tshirts = [(color, size) for color in colors for size in sizes]
等效的for循环写法:
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
tshirts = []
for color in colors:
for size in sizes:
tshirts.append((color, size))
这个嵌套的列表推导式使用两个嵌套的 for 循环遍历 colors 列表中的每个颜色和 sizes 列表中的每个尺寸,并创建一个由颜色和尺寸组成的元组。每个元组被添加到列表 tshirts 中。
以上的常规for循环逐一迭代colors和sizes中的元素,将每个颜色和尺寸组合成一个元组,然后将它添加到tshirts列表中。
这个常规for循环与列表推导式产生了相同的结果。最终的结果是tshirts包含了colors和sizes两个列表中的所有可能组合。
3. 使用多个条件的列表推导式:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_squares = [num**2 for num in numbers if num % 2 == 0]
结语
列表推导式具有以下几个优点:
简洁性:列表推导式提供一种简洁的语法来创建和转换列表,可以用一行代码完成常规循环需要多行代码才能
实现的功能。
可读性:列表推导式的语法结构清晰,能够直观地表达列表的生成方式。
支持过滤和转换:列表推导式支持条件过滤,可以根据特定条件筛选出需要的元素,同时也支持对列表中的元素
进行转换、计算等操作。
可嵌套:列表推导式支持嵌套,可以在一个推导式中使用多个 for 循环或添加额外的条件。
总而言之,列表推导式提供了一种简洁高效的方式来创建、转换和筛选列表,使得代码更具表现力和可读性,同时也能提高执行效率。