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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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语句删除对象并不会立即释放内存空间,而是将其标记为可回收,在垃圾回收时才会被真正释放。


相关文章
|
13天前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》图、查找、排序专题考点(含解析)
408考研——《数据结构》图,查找和排序专题考点选择题汇总(含解析)。
65 29
|
13天前
|
存储 机器学习/深度学习 人工智能
C 408—《数据结构》易错考点200题(含解析)
408考研——《数据结构》精选易错考点200题(含解析)。
84 27
|
1月前
|
存储 运维 负载均衡
Hologres 查询队列全面解析
Hologres V3.0引入查询队列功能,实现请求有序处理、负载均衡和资源管理,特别适用于高并发场景。该功能通过智能分类和调度,确保复杂查询不会垄断资源,保障系统稳定性和响应效率。在电商等实时业务中,查询队列优化了数据写入和查询处理,支持高效批量任务,并具备自动流控、隔离与熔断机制,确保核心业务不受干扰,提升整体性能。
69 11
|
2月前
|
索引 Python
Python列表
Python列表。
55 8
|
2月前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
46 9
|
2月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
76 14
|
2月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
132 10
|
3月前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
130 2
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析