入门 Python 语言:Python数组推导式

入门 Python 语言:Python数组推导式

目录

入门 Python 语言:Python数组推导式

✨前言✨

📚本篇目标

🔥重难点说明

重点

难点

📖学习正文

数组推导式基础学习

数组推导式结合条件判断

嵌套数组推导式

复杂场景应用

💻练习题

单选题-5

多选题-3

判断题-2

代码题-1

📝答案解析

单选题

多选题

判断题

代码题

总结

Python的优势对比于 C++ 的维度点说明


✨前言✨

本系列文章目的在于将 Python 的基础内容完全夯实,最终目的是为后期的深度学习在算法上有一定的铺垫,前期在学习数学的过程中也会有很大的帮助,相对于 C++ 来说 Python 有自身的优势,文末会有 Python 的优势对比于 C++ 的维度点说明,我已经先写过 C++的基础使用 了,两种语言各自有各自的优势,我们要根据具体的需求来分析使用哪种语言更为方便,其它的语言暂时不在考虑范畴之内,我们的目标是AI深度学习。

前置环境与代码结构文章:

1、Python 环境配置与Jupyter Notebook开发工具下载使用

2、入门 Python 语言:Python基础课程目录

📚本篇目标

  1. 让初学者了解 Python 数组推导式的基本概念和作用。
  2. 掌握数组推导式的基础语法和使用方法。
  3. 学会将数组推导式与条件判断结合,实现对列表元素的筛选和处理。
  4. 理解嵌套数组推导式的结构和应用场景,以及在复杂场景中运用数组推导式解决问题。

🔥重难点说明

重点

  • 数组推导式的基础语法,能够使用它简洁地创建列表。
  • 数组推导式与条件判断的结合,实现对列表元素的灵活筛选和转换。
  • 嵌套数组推导式的使用,处理多维数据的生成和转换。

难点

  • 嵌套数组推导式的逻辑理解,尤其是多层循环和条件判断的嵌套。
  • 在复杂场景中准确运用数组推导式,需要清晰的逻辑思维和对数据处理的理解。

📖学习正文

数组推导式基础学习

数组推导式是一种简洁的创建列表的方式,基本语法为 [expression for item in iterable]。

# 创建一个包含 0 到 4 的平方的列表
squares = [i**2 for i in range(5)]
print("平方列表:", squares)

执行效果:

平方列表: [0, 1, 4, 9, 16]

数组推导式结合条件判断

可以在数组推导式中加入条件判断,语法为 [expression for item in iterable if condition]。

# 从 0 到 9 中筛选出偶数并计算其平方
even_squares = [i**2 for i in range(10) if i % 2 == 0]
print("偶数的平方列表:", even_squares)

执行效果:

偶数的平方列表: [0, 4, 16, 36, 64]

嵌套数组推导式

嵌套数组推导式可以处理多维数据,语法为 [expression for outer_item in outer_iterable for inner_item in inner_iterable]。

# 创建一个 3x3 的矩阵
matrix = [[i * j for j in range(3)] for i in range(3)]
print("3x3 矩阵:", matrix)

执行效果:

3x3 矩阵: [[0, 0, 0], [0, 1, 2], [0, 2, 4]]

复杂场景应用

在复杂场景中,数组推导式可以结合函数调用、条件判断等进行更复杂的数据处理。

# 定义一个函数判断是否为质数
def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

# 从 0 到 20 中筛选出质数
primes = [i for i in range(21) if is_prime(i)]
print("0 到 20 之间的质数:", primes)

执行效果:

0 到 20 之间的质数: [2, 3, 5, 7, 11, 13, 17, 19]

💻练习题

单选题-5

1. 以下哪个是数组推导式的基本语法?
A. (expression for item in iterable)
B. [expression for item in iterable]
C. {expression for item in iterable}
D. [expression if condition for item in iterable]

2. 执行以下代码,结果是?

numbers = [i * 2 for i in [1, 2, 3]]
print(numbers)

A. [1, 2, 3]
B. [2, 4, 6]
C. [3, 6, 9]
D. [4, 8, 12]

3. 要从列表 [1, 2, 3, 4, 5] 中筛选出大于 3 的元素,正确的数组推导式是?
A. [i for i in [1, 2, 3, 4, 5] if i < 3]
B. [i for i in [1, 2, 3, 4, 5] if i > 3]
C. [i > 3 for i in [1, 2, 3, 4, 5]]
D. [i if i > 3 for i in [1, 2, 3, 4, 5]]

4. 以下关于嵌套数组推导式的说法,正确的是?
A. 只能有两层嵌套
B. 嵌套层数没有限制
C. 不能与条件判断结合使用
D. 只能用于创建二维列表

5. 执行以下代码,结果是?

matrix = [[i + j for j in range(2)] for i in range(2)]
print(matrix)

A. [[0, 1], [1, 2]]
B. [[0, 0], [1, 1]]
C. [[1, 2], [2, 3]]
D. [[0, 1], [2, 3]]

多选题-3

1. 数组推导式可以用于?
A. 创建列表
B. 筛选列表元素
C. 转换列表元素
D. 创建字典
2. 以下哪些是合法的数组推导式?
A. [i**2 for i in range (5)]
B. [i for i in range (10) if i % 2 == 0]
C. [[i * j for j in range (3)] for i in range (3)]
D. [i if i > 5 else 0 for i in range (10)]
3. 数组推导式结合条件判断可以实现?
A. 筛选出满足条件的元素
B. 对满足条件的元素进行转换
C. 对不满足条件的元素进行过滤
D. 对所有元素进行统一转换

判断题-2

  1. 数组推导式只能使用一次循环。( )
  2. 在数组推导式中,条件判断语句可以省略。( )

代码题-1

编写一个 Python 程序,使用数组推导式创建一个包含 1 到 10 之间所有奇数的平方的列表,并打印该列表。

📝答案解析

单选题

  1. 答案:B
    • 数组推导式的基本语法是 [expression for item in iterable],所以选 B。选项 A 是生成器表达式的语法;选项 C 是集合推导式或字典推导式的部分语法;选项 D 语法错误。
  2. 答案:B
    • 数组推导式 [i * 2 for i in [1, 2, 3]] 会将列表 [1, 2, 3] 中的每个元素乘以 2,结果为 [2, 4, 6],所以选 B。
  3. 答案:B
    • 要筛选出大于 3 的元素,数组推导式应该是 [i for i in [1, 2, 3, 4, 5] if i > 3],所以选 B。选项 A 筛选的是小于 3 的元素;选项 C 得到的是布尔值列表;选项 D 语法错误。
  4. 答案:B
    • 嵌套数组推导式的嵌套层数没有限制,可以根据需要进行多层嵌套;可以与条件判断结合使用;不仅能用于创建二维列表,还能处理更高维度的数据。所以选 B。
  5. 答案:A
    • 对于嵌套数组推导式 [[i + j for j in range(2)] for i in range(2)],当 i = 0 时,内层循环生成 [0, 1];当 i = 1 时,内层循环生成 [1, 2],所以结果是 [[0, 1], [1, 2]],选 A。

多选题

  1. 答案:ABC
    • 数组推导式可以用于创建列表、筛选列表元素和转换列表元素,但不能直接用于创建字典。所以选 ABC。
  2. 答案:ABCD
    • 选项 A 是基本的数组推导式,用于创建平方列表;选项 B 结合了条件判断,筛选出偶数;选项 C 是嵌套数组推导式,创建二维矩阵;选项 D 结合了条件表达式,对元素进行条件转换。所以 ABCD 都是合法的数组推导式。
  3. 答案:ABC
    • 数组推导式结合条件判断可以筛选出满足条件的元素,对满足条件的元素进行转换,同时过滤掉不满足条件的元素,但不是对所有元素进行统一转换。所以选 ABC。

判断题

  1. 答案:错误
    • 数组推导式可以使用多层循环,例如嵌套数组推导式就使用了多层循环。所以该说法错误。
  2. 答案:正确
    • 在数组推导式中,条件判断语句是可选的,可以省略。基本的数组推导式 [expression for item in iterable] 就没有条件判断语句。所以该说法正确。

代码题

odd_squares = [i**2 for i in range(1, 11) if i % 2 != 0]
print(odd_squares)

使用数组推导式,从 1 到 10 中筛选出奇数,然后计算其平方,将结果存储在列表 odd_squares 中并打印。

总结

本文全面介绍了 Python 数组推导式的相关知识,包括基础学习、与条件判断结合、嵌套数组推导式以及复杂场景应用。通过示例代码展示了数组推导式的强大功能和简洁性。练习题帮助巩固了所学内容,让我们更深入地理解和运用数组推导式。掌握数组推导式能使我们在处理列表数据时更加高效和灵活,是 Python 编程中一项重要的技能。

Python的优势对比于 C++ 的维度点说明

对比维度Python 优势C++ 情况
性能效率1. 开发效率高:代码简洁,语法灵活,能够用较少的代码实现相同的功能,缩短开发周期。
2. 有高性能库支持:对于计算密集型任务,可以使用如 NumPy、Pandas 等高性能库,它们底层使用 C 或 Fortran 实现,能在一定程度上弥补 Python 执行速度慢的问题。
1. 开发效率低:代码相对冗长,需要编写更多的代码来实现相同功能,开发周期较长。
2. 开发难度大:需要手动管理内存,容易出现内存泄漏等问题,对开发者要求较高。
底层控制能力1. 代码编写简单快速:无需关注底层硬件细节,能让开发者更专注于业务逻辑的实现,快速搭建应用原型。
2. 适合快速迭代开发:在应用开发过程中,能够快速对代码进行修改和调整,适应不断变化的需求。
1. 代码编写复杂:需要对底层硬件有深入了解,编写代码时要处理很多底层细节,开发难度大。
2. 开发周期长:由于需要关注底层,代码的修改和调整相对困难,不适合快速迭代开发。
语言特性1. 语法简洁易懂:代码可读性高,易于学习和上手,降低了编程门槛,适合初学者。
2. 动态类型灵活:在编写代码时无需提前声明变量类型,能够根据需要灵活赋值,提高了代码的编写效率。
1. 语法复杂:学习成本较高,对于初学者来说有一定难度。
2. 静态类型不够灵活:在编写代码时需要提前声明变量类型,不够灵活,修改代码时可能需要对类型进行调整。
可移植性1. 跨平台部署方便:只要安装了相应的 Python 解释器,代码可以在不同操作系统上轻松运行,无需重新编译。
2. 云服务支持好:很多云服务平台都提供了 Python 运行环境,方便将 Python 应用部署到云端。
1. 跨平台编译麻烦:不同操作系统的编译器和运行时环境可能存在差异,需要针对不同平台进行编译和调试。
2. 云服务集成复杂:将 C++ 应用部署到云服务平台时,需要处理更多的底层配置和依赖问题。
生态系统和工具链1. 库丰富且易用:拥有大量的开源库和框架,涵盖了数据分析、机器学习、Web 开发等多个领域,能够快速实现各种功能。
2. 社区活跃:有庞大的开发者社区,遇到问题可以很容易找到解决方案和技术支持。
1. 库学习成本高:虽然有很多专业级库,但部分库的学习曲线较陡,使用起来有一定难度。
2. 社区相对较小:相比 Python 社区,C++ 社区规模相对较小,获取技术支持和解决方案的渠道相对较少。
安全性和稳定性1. 内置安全机制:有一些内置的安全机制,如异常处理机制,能够在程序出现错误时进行捕获和处理,避免程序崩溃。
2. 代码审查相对容易:简洁的语法和动态类型使得代码结构相对简单,在代码审查时更容易发现问题。
1. 手动管理易出错:手动管理内存和资源容易出现错误,如内存泄漏、悬空指针等,影响程序的稳定性和安全性。
2. 代码审查复杂:由于语法复杂,代码结构可能比较复杂,在代码审查时需要花费更多的时间和精力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值