【100天精通python】Day7:数据结构_列表 List的创建、删除、访问、遍历、统计、排序、推导等使用

简介: 【100天精通python】Day7:数据结构_列表 List的创建、删除、访问、遍历、统计、排序、推导等使用

f15243b514ca481f8e7f98844181389e.png

       在Python中,列表是一种有序的可变数据类型,用于存储一组元素。

       列表使用方括号“[] ”来定义,其中的元素可以是任意数据类型,包括数字、字符串、布尔值、其他列表等。

       列表中的元素之间用逗号 “, ”分隔。

1 列表的创建

1.1 创建空列表

empty_list = []

1.2 创建包含元素的列表

numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "orange"]
mixed_data = [1, "hello", True, 3.14]

1.3 使用list()函数创建列表

numbers = list(range(1, 6))  # 创建一个包含1到5的整数列表

1.4 使用列表解析(List Comprehension)创建列表

squares = [x**2 for x in range(1, 6)]  # 创建一个包含1到5的平方的列表,即[1, 4, 9, 16, 25]

1.5 创建嵌套列表

nested_list = [[1, 2, 3], ["a", "b", "c"], [True, False]]

注意:列表中的元素可以是任意数据类型,而且列表长度可以根据需要动态调整,因为列表是可变的。可以通过索引来访问列表中的元素,也可以使用切片来获取子列表。例如:

my_list = [1, 2, 3, 4, 5]
# 访问列表中的元素
print(my_list[0])  # 输出:1
print(my_list[2])  # 输出:3
# 使用切片获取子列表
subset = my_list[1:4]  # subset变量将包含列表中索引为1到3的元素,即[2, 3, 4

2 列表的删除

2.1 清空列表所有元素

my_list = [1, 2, 3, 4, 5]
my_list.clear()  # 清空my_list,即变为一个空列表:[]

2.2 删除整个列表

my_list = [1, 2, 3, 4, 5]
del my_list  # 删除整个列表

请注意,上述操作是对原始列表进行的更改。如果需要保留原始列表并创建一个新的列表,可以使用切片或列表解析来实现。例如:

my_list = [1, 2, 3, 4, 5]
new_list = my_list[:2] + my_list[3:]  # 创建一个新列表,删除索引为2的元素,即[1, 2, 4, 5]

3 访问列表元素

要访问列表元素,可以使用索引或切片。

3.1 使用索引访问单个元素

       列表中的元素按照从左到右的顺序分配索引,从0开始计数。可以使用索引来访问列表中的单个元素。

my_list = [10, 20, 30, 40, 50]
first_element = my_list[0]  # 获取第一个元素,索引为0
second_element = my_list[1]  # 获取第二个元素,索引为1
third_element = my_list[2]  # 获取第三个元素,索引为2
print(first_element)  # 输出:10
print(second_element)  # 输出:20
print(third_element)  # 输出:30

3.2 使用负数索引访问倒数元素

       使用负数索引来访问列表中的倒数元素,即从列表末尾开始计数

my_list = [10, 20, 30, 40, 50]
last_element = my_list[-1]  # 获取最后一个元素,索引为-1
second_last_element = my_list[-2]  # 获取倒数第二个元素,索引为-2
print(last_element)  # 输出:50
print(second_last_element)  # 输出:40

3.3 使用切片访问多个元素

       切片允许获取列表中的多个元素,可以指定起始索引和结束索引来创建一个切片。

my_list = [10, 20, 30, 40, 50]
slice_of_list = my_list[1:4]  # 获取索引1到索引3的元素,不包括索引4
print(slice_of_list)  # 输出:[20, 30, 40]

4 遍历列表

       遍历列表是指按顺序访问列表中的每个元素,以执行相同或类似的操作。在Python中,有几种方法可以遍历列表。

4.1 使用for循环遍历列表元素

       使用for循环是最常见和简单的遍历列表的方法。它可以依次获取列表中的每个元素,并对每个元素执行指定的操作。

my_list = [10, 20, 30, 40, 50]
for item in my_list:
    print(item)  # 输出列表中的每个元素,依次打印:10 20 30 40 50

4.2 使用while循环和索引遍历列表元素

       使用while循环和索引可以手动遍历列表中的元素。在这种情况下,需要使用一个索引变量来控制循环。

my_list = [10, 20, 30, 40, 50]
index = 0
while index < len(my_list):
    print(my_list[index])  # 输出列表中的每个元素,依次打印:10 20 30 40 50
    index += 1

4.3  使用enumerate()函数同时获取索引和元素

       enumerate()函数可以在遍历列表时同时获取元素和对应的索引。

my_list = [10, 20, 30, 40, 50]
for index, item in enumerate(my_list):
    print(f"Index: {index}, Element: {item}")  # 输出:Index: 0, Element: 10  Index: 1, Element: 20 ...

5 添加修改删除列表元素

       在Python中,可以通过索引来添加和修改列表元素。

5.1 添加元素

       a) 使用append()方法:append()方法用于在列表的末尾添加一个元素。

my_list = [10, 20, 30]
my_list.append(40)
print(my_list)  # 输出:[10, 20, 30, 40]
# 也可以一次性添加多个元素,通过使用extend()方法:
my_list.extend([50, 60])
print(my_list)  # 输出:[10, 20, 30, 40, 50, 60]

       b) 使用insert()方法:insert()方法用于在指定索引处插入一个元素。

my_list = [10, 20, 30]
my_list.insert(1, 15)  # 在索引1处插入元素15
print(my_list)  # 输出:[10, 15, 20, 30]

5.2 修改元素

       通过索引访问列表中的元素,并用新的值替换它,即可修改列表元素。

my_list = [10, 20, 30]
my_list[1] = 25  # 将索引1处的元素20修改为25
print(my_list)  # 输出:[10, 25, 30]

5.3 删除元素

5.3.1 使用del关键字删除列表中的元素

my_list = [1, 2, 3, 4, 5]
del my_list[2]  # 删除索引为2的元素,此时my_list变为[1, 2, 4, 5]

5.3.2 使用remove()方法删除特定值的元素

my_list = [1, 2, 3, 4, 5]
my_list.remove(3)  # 删除值为3的元素,此时my_list变为[1, 2, 4, 5]

5.3.3 使用pop()方法删除指定索引的元素并返回该元素

my_list = [1, 2, 3, 4, 5]
removed_element = my_list.pop(2)  # 删除索引为2的元素(值为3)并将其赋值给removed_element,此时my_list变为[1, 2, 4, 5]

5.3.4 使用切片来删除多个元素

my_list = [1, 2, 3, 4, 5]
my_list = my_list[:2] + my_list[3:]  # 删除索引为2的元素(值为3),此时my_list变为[1, 2, 4, 5]

6 对列表进行统计和计算

       对列表进行统计和计算,例如求和、找最大值和最小值、计算平均值等。以下是一些常用的列表统计和计算方法:

6.1 求和:

       使用sum()函数计算列表中所有元素的和。

my_list = [1, 2, 3, 4, 5]
total_sum = sum(my_list)
print(total_sum)  # 输出:15

6.2 最大值和最小值:

  • 使用max()函数找到列表中的最大值。
  • 使用min()函数找到列表中的最小值。
my_list = [1, 2, 3, 4, 5]
max_value = max(my_list)
min_value = min(my_list)
print(max_value)  # 输出:5
print(min_value)  # 输出:1

6.3 平均值:

  • 使用sum()和len()函数结合起来计算列表的平均值。
my_list = [1, 2, 3, 4, 5]
average_value = sum(my_list) / len(my_list)
print(average_value)  # 输出:3.0

6.4 统计元素个数:

  • 使用len()函数获取列表中元素的总数。
my_list = [1, 2, 3, 4, 5]
element_count = len(my_list)
print(element_count)  # 输出:5

7 对列表进行排序

7.1 使用sort()方法:

 sort()方法用于在原地对列表进行排序,即修改原始列表。排序后,原始列表会被改变,而不是创建一个新的排序后的副本。

my_list = [3, 1, 4, 2, 5]
my_list.sort()
print(my_list)  # 输出:[1, 2, 3, 4, 5]

7.2  使用sorted()函数:

  sorted()函数用于对列表进行排序并返回一个新的排序后的列表,而不会修改原始列表。

my_list = [3, 1, 4, 2, 5]
sorted_list = sorted(my_list)
print(sorted_list)  # 输出:[1, 2, 3, 4, 5]
print(my_list)  # 输出:[3, 1, 4, 2, 5](原始列表不变)

7.3  自定义排序规则:

       使用sort()方法或sorted()函数的key参数来指定自定义的排序规则。

# 按绝对值进行排序
my_list = [-3, 1, -4, 2, -5]
my_list.sort(key=abs)
print(my_list)  # 输出:[1, 2, -3, -4, -5]
# 按字符串长度进行排序
my_list = ['apple', 'banana', 'orange', 'kiwi']
my_list.sort(key=len)
print(my_list)  # 输出:['kiwi', 'apple', 'banana', 'orange']

注意:对于复杂对象的列表,您可以使用key参数指定一个函数,该函数会返回用于排序的关键值。排序将根据这些关键值进行。如果您使用sort()方法进行原地排序,请注意原始列表将被修改,而不会返回新的排序后的列表。而使用sorted()函数则会返回一个新的排序后的列表,而不会修改原始列表。

8 列表推导式

       列表推导式是一种简洁的语法,用于创建新的列表。它允许您通过在一行代码中定义列表的元素,并根据一定的规则对现有的列表或其他可迭代对象进行转换和过滤。

       列表推导式的基本形式是:

[expression for item in iterable if condition]

其中:

  • expression 是一个表达式,用于定义新列表中的元素;
  • item 是来自可迭代对象的每个元素;
  • iterable 是一个可迭代对象,比如列表、元组、集合等;
  • condition 是一个可选的条件,用于过滤可迭代对象中的元素。

下面是一些使用列表推导式的示例:

8.1 创建一个包含1到10的平方的列表:

squares = [x**2 for x in range(1, 11)]
print(squares)  # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

8.2  过滤出列表中的偶数:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers)  # 输出:[2, 4, 6, 8, 10]

8.3 将字符串列表中的元素转换为大写:

words = ['hello', 'world', 'python']
upper_words = [word.upper() for word in words]
print(upper_words)  # 输出:['HELLO', 'WORLD', 'PYTHON']

8.4 使用条件表达式进行元素转换:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squared_or_negative = [x**2 if x % 2 == 0 else -x for x in numbers]
print(squared_or_negative)  # 输出:[-1, 4, -3, 16, -5, 36, -7, 64, -9, 100]

9 多维列表

       多维列表是指包含多个嵌套列表的列表,也可以称为二维列表、三维列表等,根据嵌套层数而定。在Python中,您可以使用列表的列表来表示多维列表,其中每个元素是一个子列表。这样的列表可以形成一个类似于矩阵或二维数组的结构,它在数据处理和存储方面非常有用。

       下面是一个二维列表的示例:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

在这个示例中,matrix 是一个包含三个子列表的列表,每个子列表代表一行。您可以使用索引访问多维列表中的元素,例如 matrix[0][1] 将返回 2,表示第一行第二列的元素。

您还可以使用嵌套的列表推导式来创建多维列表。例如,以下代码创建一个3x3的全零二维列表:

rows = 3
cols = 3
matrix = [[0 for _ in range(cols)] for _ in range(rows)]
print(matrix)  # 输出:[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

同样,您可以创建更高维度的列表,只需在嵌套层级上增加更多的列表。

例如,以下代码创建一个三维列表:

x = 3
y = 3
z = 3
three_dimensional_list = [[[0 for _ in range(z)] for _ in range(y)] for _ in range(x)]
print(three_dimensional_list)
# 输出:[[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]

多维列表在处理各种数据结构和算法问题时非常有用,特别是在图像处理、矩阵运算和游戏开发等领域。


目录
相关文章
|
7月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
307 1
|
11月前
|
存储 人工智能 索引
Python数据结构:列表、元组、字典、集合
Python 中的列表、元组、字典和集合是常用数据结构。列表(List)是有序可变集合,支持增删改查操作;元组(Tuple)与列表类似但不可变,适合存储固定数据;字典(Dictionary)以键值对形式存储,无序可变,便于快速查找和修改;集合(Set)为无序不重复集合,支持高效集合运算如并集、交集等。根据需求选择合适的数据结构,可提升代码效率与可读性。
|
存储 机器学习/深度学习 算法
C 408—《数据结构》图、查找、排序专题考点(含解析)
408考研——《数据结构》图,查找和排序专题考点选择题汇总(含解析)。
949 29
|
存储 人工智能 算法
【C++数据结构——内排序】二路归并排序(头歌实践教学平台习题)【合集】
本关任务是实现二路归并算法,即将两个有序数组合并为一个有序数组。主要内容包括: - **任务描述**:实现二路归并算法。 - **相关知识**: - 二路归并算法的基本概念。 - 算法步骤:通过比较两个有序数组的元素,依次将较小的元素放入新数组中。 - 代码示例(以 C++ 为例)。 - 时间复杂度为 O(m+n),空间复杂度为 O(m+n)。 - **测试说明**:平台会对你编写的代码进行测试,提供输入和输出示例。 - **通关代码**:提供了完整的 C++ 实现代码。 - **测试结果**:展示代码运行后的排序结果。 开始你的任务吧,祝你成功!
414 10
|
搜索推荐 算法 数据处理
【C++数据结构——内排序】希尔排序(头歌实践教学平台习题)【合集】
本文介绍了希尔排序算法的实现及相关知识。主要内容包括: - **任务描述**:实现希尔排序算法。 - **相关知识**: - 排序算法基础概念,如稳定性。 - 插入排序的基本思想和步骤。 - 间隔序列(增量序列)的概念及其在希尔排序中的应用。 - 算法的时间复杂度和空间复杂度分析。 - 代码实现技巧,如循环嵌套和索引计算。 - **测试说明**:提供了测试输入和输出示例,帮助验证代码正确性。 - **我的通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了代码运行的测试结果。 通过这些内容,读者可以全面了解希尔排序的原理和实现方法。
294 10
|
搜索推荐 C++
【C++数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】
快速排序是一种高效的排序算法,基于分治策略。它的主要思想是通过选择一个基准元素(pivot),将数组划分成两部分。一部分的元素都小于等于基准元素,另一部分的元素都大于等于基准元素。然后对这两部分分别进行排序,最终使整个数组有序。(第一行是元素个数,第二行是待排序的原始关键字数据。本关任务:实现快速排序算法。开始你的任务吧,祝你成功!
331 7
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
597 3
|
数据采集 存储 算法
【C++数据结构——图】图的遍历(头歌教学实验平台习题) 【合集】
本文介绍了图的遍历算法,包括深度优先遍历(DFS)和广度优先遍历(BFS)。深度优先遍历通过递归方式从起始节点深入探索图,适用于寻找路径、拓扑排序等场景;广度优先遍历则按层次逐层访问节点,适合无权图最短路径和网络爬虫等应用。文中提供了C++代码示例,演示了如何实现这两种遍历方法,并附有测试用例及结果,帮助读者理解和实践图的遍历算法。
748 0
|
算法 定位技术 Python
震惊!Python 图结构竟然可以这样玩?DFS&BFS 遍历技巧大公开
在 Python 编程中,图是一种重要的数据结构,而深度优先搜索(DFS)和广度优先搜索(BFS)是遍历图的两种关键算法。本文将通过定义图的数据结构、实现 DFS 和 BFS 算法,并通过具体示例展示其应用,帮助读者深入理解这两种算法。DFS 适用于寻找路径和检查图连通性,而 BFS 适用于寻找最短路径。掌握这些技巧,可以更高效地解决与图相关的复杂问题。
237 2
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
本文介绍了Python中图的表示方法及遍历策略。图可通过邻接表或邻接矩阵表示,前者节省空间适合稀疏图,后者便于检查连接但占用更多空间。文章详细展示了邻接表和邻接矩阵的实现,并讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法,帮助读者掌握图的基本操作和应用技巧。
178 4

推荐镜像

更多