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语句删除对象并不会立即释放内存空间,而是将其标记为可回收,在垃圾回收时才会被真正释放。


相关文章
|
9月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
738 0
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
708 1
|
12月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
763 1
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
1162 77
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
888 4
JSON数据解析实战:从嵌套结构到结构化表格
232.用栈实现队列,225. 用队列实现栈
在232题中,通过两个栈(`stIn`和`stOut`)模拟队列的先入先出(FIFO)行为。`push`操作将元素压入`stIn`,`pop`和`peek`操作则通过将`stIn`的元素转移到`stOut`来实现队列的顺序访问。 225题则是利用单个队列(`que`)模拟栈的后入先出(LIFO)特性。通过多次调整队列头部元素的位置,确保弹出顺序符合栈的要求。`top`操作直接返回队列尾部元素,`empty`判断队列是否为空。 两题均仅使用基础数据结构操作,展示了栈与队列之间的转换逻辑。
|
存储 人工智能 索引
Python数据结构:列表、元组、字典、集合
Python 中的列表、元组、字典和集合是常用数据结构。列表(List)是有序可变集合,支持增删改查操作;元组(Tuple)与列表类似但不可变,适合存储固定数据;字典(Dictionary)以键值对形式存储,无序可变,便于快速查找和修改;集合(Set)为无序不重复集合,支持高效集合运算如并集、交集等。根据需求选择合适的数据结构,可提升代码效率与可读性。
1191 1
|
算法 调度 C++
STL——栈和队列和优先队列
通过以上对栈、队列和优先队列的详细解释和示例,希望能帮助读者更好地理解和应用这些重要的数据结构。
391 11
☀☀☀☀☀☀☀有关栈和队列应用的oj题讲解☼☼☼☼☼☼☼
### 简介 本文介绍了三种数据结构的实现方法:用两个队列实现栈、用两个栈实现队列以及设计循环队列。具体思路如下: 1. **用两个队列实现栈**: - 插入元素时,选择非空队列进行插入。 - 移除栈顶元素时,将非空队列中的元素依次转移到另一个队列,直到只剩下一个元素,然后弹出该元素。 - 判空条件为两个队列均为空。 2. **用两个栈实现队列**: - 插入元素时,选择非空栈进行插入。 - 移除队首元素时,将非空栈中的元素依次转移到另一个栈,再将这些元素重新放回原栈以保持顺序。 - 判空条件为两个栈均为空。

热门文章

最新文章

推荐镜像

更多