入门 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. 理解嵌套列表的结构和使用方式。

🔥重难点说明

重点

  • 列表的基本操作,包括元素的访问、修改、追加、删除等,这些操作是日常编程中处理列表数据的基础。
  • 列表切片的使用,它可以灵活地获取列表的部分元素,是非常实用的技巧。
  • 列表排序和反转操作,能帮助对列表数据进行整理和处理。

难点

  • 列表切片的参数理解和运用,尤其是起始索引、结束索引和步长的组合使用。
  • 嵌套列表的操作,包括多层索引的使用和对嵌套结构的理解,容易在操作中出现索引越界等错误。

📖学习正文

列表定义与创建

在 Python 中,列表是一种有序、可变的数据结构,使用方括号 [] 来定义。可以包含不同类型的元素。

# 创建一个空列表
empty_list = []
print("空列表:", empty_list)

# 创建包含元素的列表
fruits = ["apple", "banana", "cherry"]
print("水果列表:", fruits)

执行效果:

空列表: []
水果列表: ['apple', 'banana', 'cherry']

列表元素访问与修改

可以使用索引来访问列表中的元素,索引从 0 开始。也可以通过索引对列表元素进行修改。

fruits = ["apple", "banana", "cherry"]
# 访问第一个元素
first_fruit = fruits[0]
print("第一个水果:", first_fruit)

# 修改第二个元素
fruits[1] = "grape"
print("修改后的列表:", fruits)

执行效果:

第一个水果: apple
修改后的列表: ['apple', 'grape', 'cherry']

列表常用操作

列表切片

列表切片用于获取列表的部分元素,语法为 list[start:stop:step],其中 start 是起始索引,stop 是结束索引(不包含),step 是步长。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 获取索引 1 到 3 的元素
slice1 = numbers[1:4]
print("切片 1:", slice1)

# 从索引 0 开始,每隔一个元素取一个
slice2 = numbers[0::2]
print("切片 2:", slice2)

执行效果:

切片 1: [2, 3, 4]
切片 2: [1, 3, 5, 7, 9]
列表追加、插入、删除元素
fruits = ["apple", "banana"]
# 追加元素
fruits.append("cherry")
print("追加元素后的列表:", fruits)

# 插入元素
fruits.insert(1, "grape")
print("插入元素后的列表:", fruits)

# 删除指定元素
fruits.remove("banana")
print("删除元素后的列表:", fruits)

# 删除指定索引的元素
del fruits[0]
print("再次删除元素后的列表:", fruits)

执行效果:

追加元素后的列表: ['apple', 'banana', 'cherry']
插入元素后的列表: ['apple', 'grape', 'banana', 'cherry']
删除元素后的列表: ['apple', 'grape', 'cherry']
再次删除元素后的列表: ['grape', 'cherry']
列表排序、反转
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
# 排序
numbers.sort()
print("排序后的列表:", numbers)

# 反转
numbers.reverse()
print("反转后的列表:", numbers)

执行效果:

排序后的列表: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
反转后的列表: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

嵌套列表

嵌套列表是指列表中的元素也是列表。可以通过多层索引来访问嵌套列表中的元素。

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 访问第二行第三列的元素
element = matrix[1][2]
print("嵌套列表中的元素:", element)

执行效果:

嵌套列表中的元素: 6

💻练习题

单选题-5

1. 以下哪种方式可以创建一个空列表?
A. list {}
B. []
C. ()
D. {}
2. 对于列表 my_list = [1, 2, 3, 4, 5],my_list[1:3] 的结果是?
A. [1, 2]
B. [2, 3]
C. [3, 4]
D. [2, 3, 4]
3. 要在列表 fruits = ["apple", "banana"] 的末尾添加元素 "cherry",应使用的方法是?
A. insert ()
B. append ()
C. remove ()
D. pop ()
4. 执行以下代码后,列表 numbers 的结果是?

python
numbers = [1, 2, 3]
numbers.reverse()

A. [1, 2, 3]
B. [3, 2, 1]
C. [2, 1, 3]
D. [1, 3, 2]
5. 对于嵌套列表 nested_list = [[1, 2], [3, 4]],访问元素 4 的正确方式是?
A. nested_list [0][1]
B. nested_list [1][0]
C. nested_list [1][1]
D. nested_list [0][0]

多选题-3

1. 以下属于列表常用操作方法的有?
A. append ()
B. insert ()
C. sort ()
D. reverse ()

2. 列表切片my_list[2:5] 可以获取列表 my_list 中哪些索引的元素?
A. 2
B. 3
C. 4
D. 5

3. 关于列表的说法,正确的是?
A. 列表中的元素可以是不同的数据类型
B. 列表是可变的数据结构
C. 列表的索引从 1 开始
D. 可以使用负数索引访问列表元素

判断题-2

列表的 sort() 方法会返回一个新的排序后的列表,原列表不变。( )

可以使用 del 语句删除列表中的元素。( )

代码题-1

编写一个 Python 程序,创建一个包含 1 到 10 的列表,然后将列表中的偶数元素删除,最后打印剩余的列表。

📝答案解析

单选题

  1. 答案:B
    • 在 Python 中,使用 [] 可以创建一个空列表,所以选 B。选项 A 语法错误;选项 C () 用于创建元组;选项 D {} 用于创建字典。
  2. 答案:B
    • 列表切片 my_list[1:3] 表示从索引 1 开始(包含)到索引 3 结束(不包含),所以结果是 [2, 3],选 B。
  3. 答案:B
    • append() 方法用于在列表末尾添加元素,所以选 B。insert() 用于在指定位置插入元素;remove() 用于删除指定元素;pop() 用于删除并返回指定索引的元素。
  4. 答案:B
    • reverse() 方法会将列表中的元素反转,所以 numbers 列表反转后变为 [3, 2, 1],选 B。
  5. 答案:C
    • 嵌套列表 nested_list = [[1, 2], [3, 4]] 中,元素 4 在第二行(索引为 1)第三列(索引为 1),所以访问方式是 nested_list[1][1],选 C。

多选题

  1. 答案:ABCD
    • append() 用于追加元素,insert() 用于插入元素,sort() 用于排序,reverse() 用于反转,它们都是列表常用的操作方法,所以选 ABCD。
  2. 答案:ABC
    • 列表切片 my_list[2:5] 表示从索引 2 开始(包含)到索引 5 结束(不包含),所以会获取索引为 2、3、4 的元素,选 ABC。
  3. 答案:ABD
    • 列表中的元素可以是不同的数据类型,列表是可变的数据结构,可以通过索引修改元素;列表的索引从 0 开始;可以使用负数索引从列表末尾开始访问元素。所以选 ABD。

判断题

  1. 答案:错误
    • 列表的 sort() 方法会直接对原列表进行排序,不会返回新的列表,原列表会被修改。所以该说法错误。
  2. 答案:正确
    • 可以使用 del 语句删除列表中的元素,例如 del my_list[0] 可以删除列表 my_list 中的第一个元素。所以该说法正确。

代码题

numbers = list(range(1, 11))
new_numbers = []
for num in numbers:
    if num % 2 != 0:
        new_numbers.append(num)
print(new_numbers)

首先使用 range(1, 11) 生成 1 到 10 的整数序列,再用 list() 函数将其转换为列表。然后遍历列表,将奇数元素添加到新列表 new_numbers 中,最后打印新列表。

总结

本文围绕 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、付费专栏及课程。

余额充值