【Python进阶】之列表推导式

本文介绍了Python中的列表推导式,这是一种强大的语法结构,用于快速生成新列表。文章详细讲解了其概念、优点、语法结构,并通过实例展示了如何使用列表推导式提高开发效率。
摘要由CSDN通过智能技术生成

前言

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 循环或添加额外的条件。

总而言之,列表推导式提供了一种简洁高效的方式来创建、转换和筛选列表,使得代码更具表现力和可读性,同时也能提高执行效率。

  • 32
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜十六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值