Python专家编程系列: 8. 高级数据结构介绍
id:4
作者: quantgalaxy@outlook.com
blog: https://blog.csdn.net/quant_galaxy
欢迎交流
Python中,除了大家常用的数据结构外,还有几个非常好用的数据结构,这里主要介绍下Heap(堆),Deque(双端队列),Array(数组)。
堆是一种基于树的数据结构,用于实现称为优先队列的抽象数据类型。
二叉树通常用于实现堆,堆主要有两种类型:
python提供了heapq模块,用于使用堆结构。
import heapq
lst = [1,5,3,6,2]
heapq.heapify(lst)
print(lst)
#[1, 2, 3, 6, 5]
heapq.heappush(lst, 10)
heapq.heappush(lst, 20)
print(lst)
#[1, 2, 3, 6, 5, 10, 20]
heapq.heappop(lst)
#1
print(lst)
# [2, 5, 3, 6, 20, 10]
heapq.nsmallest(3, lst)
# [2, 3, 5]
heapq.nlargest(1, lst)
# [20]
作者: quantgalaxy@outlook.com
blog: https://blog.csdn.net/quant_galaxy
欢迎交流
双端队列是栈和队列的泛化,允许从两端进行追加和弹出操作。
它比列表更可取,因为它在任何方向上的追加和弹出操作的时间复杂度都大约为0(1)。
另一方面,对于pop(0)和insert(0, v)操作,列表的时间复杂度为O(n)。
from collections import deque
# Create a new deque
d = deque([1, 2, 3, 4])
# Add to the right end
d.append(5)
# Add to the left end
d.appendleft(0)
# Remove from the right end
rightmost = d.pop()
# Remove from the left end
leftmost = d.popleft()
print(d)
# deque([1,2,3,4])
d.reverse()
print(d)
# deque([4,3,2,1])
作者: quantgalaxy@outlook.com
blog: https://blog.csdn.net/quant_galaxy
欢迎交流
数组是一种数据结构,它将元素存储在连续的内存位置中。
虽然列表可以存储异构数据(不同类型的数据),但数组存储同构项(在初始化时需要类型规范),这使得它们对于统一数据的大型数据集来说内存效率更高。
数组存储同构项(在初始化时需要类型规范)。一定要记住,这是和list最大的不同。
当我们创建一个数组的时候,需要指定数组元素的类型,不同类型有不同的空间占用:
from array import array
# Create an array of integers
arr_int = array('i', [1, 2, 3, 4, 5])
# Create an array of floats
arr_float = array('f', [1.0, 2.1, 3.2])
arr_int.append(6)
arr_int.extend([7, 8, 9])
last_element = arr_int.pop() # Removes and returns the last element
element_at_index_2 = arr_int.pop(2) # Removes and returns the element at index 2
print(arr_int[0]) # First element
print(arr_int[-1]) # Last element
print(arr_int[2:5]) # Elements from index 2 (inclusive) to 5 (exclusive)
注意,如果希望使用多维数组并对数组进行高级数学或统计操作,请选择Numpy数组。
作者: quantgalaxy@outlook.com
blog: https://blog.csdn.net/quant_galaxy
欢迎交流