21.从入门到精通:Python数据结构 列表 将列表当做堆栈使用 将列表当作队列使用 列表推导式 嵌套列表解析 del 语句

简介: 21.从入门到精通:Python数据结构 列表 将列表当做堆栈使用 将列表当作队列使用 列表推导式 嵌套列表解析 del 语句

Python数据结构

列表

在Python中,列表(list)是一种可变序列类型,可以存储任意数量的有序元素。列表中的元素可以是不同类型的,包括数字、字符串、列表等等。列表使用方括号([])表示,元素之间使用逗号(,)分隔。

下面是一个简单的列表示例:

my_list = [1, 2, 'three', [4, 5]]
  • 可以使用索引来访问列表中的元素,索引从0开始。例如,要访问上面列表中的第一个元素(值为1),可以使用以下代码:
print(my_list[0])

可以使用切片来访问列表中的一部分元素,切片使用[start:end]的形式表示,其中start表示起始索引,end表示结束索引(不包括end位置的元素)。

例如,要访问上面列表中的前三个元素,可以使用以下代码:

print(my_list[:3])

可以使用append()方法向列表末尾添加元素,使用insert()方法在指定位置插入元素,使用remove()方法删除指定元素,使用pop()方法删除并返回指定位置的元素。例如,要向上面的列表中添加一个元素(值为6),可以使用以下代码:

my_list.append(6)
print(my_list)
输出结果为:[1, 2, 'three', [4, 5], 6]

需要注意的是,列表是可变对象,即可以在原地修改列表中的元素。例如,要将上面列表中的第一个元素(值为1)修改为10,可以使用以下代码:

my_list[0] = 10
print(my_list)
输出结果为:[10, 2, 'three', [4, 5], 6]

列表还支持许多其他的操作,例如排序、反转、计数等等。可以使用dir()函数查看列表支持的所有方法。


将列表当做堆栈使用

在Python中,列表可以很方便地用作堆栈数据结构。堆栈是一种后进先出(LIFO)的数据结构,可以使用append()方法将元素添加到堆栈的顶部,使用pop()方法从堆栈的顶部弹出元素。以下是一个示例,展示如何使用列表实现堆栈:

# 创建一个空列表作为堆栈
stack = []
# 将元素添加到堆栈的顶部
stack.append(1)
stack.append(2)
stack.append(3)
# 从堆栈的顶部弹出元素
top_element = stack.pop()
print(top_element)  # 输出 3

在这个示例中,我们首先创建一个空列表stack作为堆栈。然后,我们使用append()方法将三个元素添加到堆栈的顶部。最后,我们使用pop()方法从堆栈的顶部弹出一个元素,并将其赋给变量top_element。我们使用print()函数将弹出的元素打印出来,输出结果为3。

使用列表作为堆栈可以使代码更加简洁和易于理解。同时,Python的列表还具有其他强大的功能,例如切片、排序和迭代等,这使得它们成为一种非常灵活和实用的数据结构。


将列表当作队列使用

在Python中,可以使用列表(list)来实现队列(queue)的功能。队列是一种先进先出(FIFO)的数据结构,支持在队尾添加元素和在队头删除元素。列表可以使用append()方法在队尾添加元素,使用pop(0)方法在队头删除元素。下面是一个简单的队列示例:

my_queue = []
在队尾添加元素
my_queue.append(1)
my_queue.append(2)
my_queue.append(3)
在队头删除元素
print(my_queue.pop(0))
print(my_queue.pop(0))
print(my_queue.pop(0))

在这个示例中,我们使用空列表my_queue来表示一个队列。使用append()方法向队尾添加元素,使用pop(0)方法从队头删除元素。可以看到,输出结果为1、2、3,符合队列的先进先出特点。

需要注意的是,列表的pop(0)方法的时间复杂度为O(n),即随着列表长度的增加,删除操作的时间会变得越来越慢。如果需要高效地实现队列,可以使用collections模块中的deque类,它是一个双端队列,支持在队头和队尾快速添加和删除元素。


列表推导式

在Python中,列表推导式是一种非常方便的语法,用于从一个可迭代对象中创建一个新的列表。列表推导式可以让我们以一种简洁、优雅的方式创建新的列表,而不需要使用循环或其他复杂的语法结构。

以下是一个简单的示例,展示如何使用列表推导式创建一个包含平方数的新列表:

numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares)  # 输出 [1, 4, 9, 16, 25]

在这个示例中,我们首先创建一个包含数字的列表numbers。然后,我们使用列表推导式创建一个新的列表squares,其中每个元素都是原列表中对应元素的平方。列表推导式的语法是在方括号中使用一个表达式,后跟一个for循环,用于迭代原列表中的每个元素。在本例中,我们使用x**2表示对x进行平方运算。

列表推导式还可以使用条件语句来过滤或转换原列表中的元素。以下是一个示例,展示如何使用条件语句过滤奇数并将偶数加倍:

numbers = [1, 2, 3, 4, 5]
filtered_numbers = [x*2 for x in numbers if x % 2 == 0]
print(filtered_numbers)  # 输出 [4, 8]

在这个示例中,我们使用条件语句if x % 2 ==

0来过滤原列表中的奇数。只有满足条件的偶数才会被加倍,并添加到新列表filtered_numbers中。

列表推导式是Python中一个非常强大和灵活的功能,可以帮助我们简化代码并提高效率。使用列表推导式可以使代码更加简洁和易于理解,同时还可以提高代码的可读性和可维护性。


嵌套列表解析

在Python中,可以使用嵌套列表解析(Nested List Comprehension)来创建嵌套列表。嵌套列表是指列表中包含其他列表,可以形成二维或多维数组。下面是一个简单的嵌套列表示例:

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

这个示例中,我们创建了一个3x3的矩阵,其中每个元素都是一个整数。现在,假设我们想将这个矩阵中的每个元素都乘以2,可以使用嵌套列表解析来实现:

new_matrix = [[2 * x for x in row] for row in matrix]

这个嵌套列表解析中,外层的列表解析用于遍历矩阵中的每一行,内层的列表解析用于遍历每一行中的每个元素。在内层列表解析中,我们将每个元素乘以2,然后使用外层列表解析将结果存储到新的矩阵中。输出结果如下:

[[2, 4, 6], [8, 10, 12], [14, 16, 18]]

需要注意的是,嵌套列表解析可以嵌套任意层数的列表解析,可以用于创建任意维度的嵌套列表。但是,如果嵌套层数太多,可能会导致代码可读性降低,建议根据实际需求选择合适的嵌套层数。


del 语句

在Python中,del语句用于删除对象的引用,从而释放内存空间。del语句可以用于删除变量、列表中的元素、字典中的键值对等。以下是一些示例:

删除变量
x = 10
del x
print(x)  # NameError: name 'x' is not defined

在这个示例中,我们定义了变量x并将其赋值为10。然后,我们使用del语句删除变量x,并尝试使用print()函数输出x的值,这会引发NameError异常,因为变量x已经不存在了。

删除列表中的元素
my_list = [1, 2, 3, 4]
del my_list[2]
print(my_list)  # [1, 2, 4]

在这个示例中,我们创建了一个包含四个元素的列表my_list。然后,我们使用del语句删除列表中的第三个元素(索引为2),并使用print()函数输出修改后的列表。

删除字典中的键值对
my_dict = {'a': 1, 'b': 2, 'c': 3}
del my_dict['b']
print(my_dict)  # {'a': 1, 'c': 3}

在这个示例中,我们创建了一个包含三个键值对的字典my_dict。然后,我们使用del语句删除字典中键为’b’的键值对,并使用print()函数输出修改后的字典。


使用del语句可以帮助我们释放不再需要的内存空间,从而提高程序的性能和效率。但是,需要注意的是,使用del语句删除对象并不会立即释放内存空间,而是将其标记为可回收,在垃圾回收时才会被真正释放。


相关文章
|
26天前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
3天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
3天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
3天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
3天前
|
数据采集 数据可视化 数据处理
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
|
3天前
|
Java 数据库连接 数据处理
Python从入门到精通:3.1.2多线程与多进程编程
Python从入门到精通:3.1.2多线程与多进程编程
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
11天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
55 0
|
20天前
|
机器学习/深度学习 数据可视化 数据挖掘
利用Python进行数据分析与可视化:从入门到精通
本文将介绍如何使用Python语言进行数据分析与可视化,从基础概念到高级技巧一应俱全。通过学习本文,读者将掌握Python在数据处理、分析和可视化方面的核心技能,为实际项目应用打下坚实基础。
|
30天前
|
算法 Python
数据结构与算法 经典排序方法(Python)
数据结构与算法 经典排序方法(Python)
24 0