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

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


相关文章
|
3天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
41 20
|
4天前
|
索引 Python
Python列表
Python列表。
26 8
|
6天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
24 9
|
14天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
27 14
|
16天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
29 10
|
27天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
210 9
|
1月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
35 1
|
27天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
53 5
|
1月前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。