后端二维数组(必须要掌握的几种Python数据结构)

后端二维数组(必须要掌握的几种Python数据结构)
必须要掌握的几种Python数据结构

必须要掌握的几种Python数据结构

Python作为一门功能强大且易学的编程语言,其丰富的数据结构体系是其核心优势之一。

Python内置基础数据结构

1. 列表(List) - 动态数组

列表是Python中最常用的数据结构之一,它是一个可变序列,可以存储不同类型的元素。

# 创建和操作列表fruits = ["苹果", "香蕉", "橙子"]fruits.append("草莓")  # 添加元素print(fruits[1])      # 访问元素: 香蕉fruits[0] = "梨"      # 修改元素del fruits[2]         # 删除元素

列表支持丰富的操作和方法:

  • 切片操作:fruits[1:3]
  • 列表推导式:[x**2 for x in range(10)]
  • 排序:fruits.sort()
  • 反转:fruits.reverse()

2. 元组(Tuple) - 不可变序列

元组与列表类似,但创建后不能修改,常用于存储不应更改的数据。

# 元组的基本使用point = (10, 20)rgb = (255, 0, 0)  # 红色print(point    # 访问元素: 10# 元组解包x, y = point

元组的特点:

  • 不可变性保证数据安全
  • 比列表更节省内存
  • 可作为字典的键(因为不可变)

3. 字典(Dictionary) - 键值对映射

字典是Python中高效的键值对存储结构,基于哈希表实现。

# 字典的创建和操作student = {"name": "张三", "age": 20, "score": 95}print(student["name"])    # 访问: 张三student["grade"] = "A"   # 添加新键值对del student["age"]       # 删除键值对# 字典方法print(student.keys())    # 所有键print(student.values())  # 所有值print(student.items())   # 所有键值对

字典的高级应用:

  • 字典推导式:{x: x**2 for x in range(5)}
  • 默认字典:from collections import defaultdict
  • 有序字典:from collections import OrderedDict

4. 集合(Set) - 唯一元素容器

集合是无序且元素唯一的容器,支持数学集合运算。

# 集合操作numbers = {1, 2, 3, 2, 1}  # 自动去重: {1, 2, 3}set1 = {1, 2, 3}set2 = {3, 4, 5}# 集合运算print(set1.union(set2))        # 并集: {1, 2, 3, 4, 5}print(set1.intersection(set2)) # 交集: {3}print(set1.difference(set2))   # 差集: {1, 2}

集合的典型用途:

  • 快速成员测试(比列表快)
  • 去除重复元素
  • 数学集合运算

高级数据结构实现

1. 栈(Stack) - 后进先出(LIFO)

栈是一种限制插入和删除只能在一端进行的线性表。

class Stack:    def __init__(self):        self.items = []        def push(self, item):        self.items.append(item)        def pop(self):        return self.items.pop()        def is_empty(self):        return self.items == []        def peek(self):        return self.items[-1] if not self.is_empty() else None# 使用栈检查括号匹配def is_balanced(expression):    stack = Stack()    pairs = {')': '(', ']': '[', '}': '{'}    for char in expression:        if char in pairs.values():            stack.push(char)        elif char in pairs.keys():            if stack.is_empty() or stack.pop() != pairs[char]:                return False    return stack.is_empty()print(is_balanced("((1+2)*[3-4])"))  # True

栈的应用场景:

  • 函数调用栈
  • 括号匹配检查
  • 表达式求值
  • 浏览器历史记录

2. 队列(Queue) - 先进先出(FIFO)

队列是一种先进先出的线性表,Python中可使用collections.deque高效实现。

from collections import deque# 基本队列操作queue = deque()queue.append("任务1")queue.append("任务2")print(queue.popleft())  # 任务1# 双端队列dq = deque([1, 2, 3])dq.appendleft(0)  # 前端添加dq.pop()          # 后端删除

队列的变体:

  • 优先队列:heapq模块
  • 阻塞队列:多线程编程
  • 循环队列:固定大小的队列

3. 链表(Linked List)

链表通过节点和指针实现,相比列表在插入删除操作上更高效。

class Node:    def __init__(self, data):        self.data = data        self.next = Noneclass LinkedList:    def __init__(self):        self.head = None        def append(self, data):        new_node = Node(data)        if not self.head:            self.head = new_node            return        last = self.head        while last.next:            last = last.next        last.next = new_node        def print_list(self):        temp = self.head        while temp:            print(temp.data, end=" -> ")            temp = temp.next        print("None")# 使用链表llist = LinkedList()llist.append(1)llist.append(2)llist.append(3)llist.print_list()  # 1 -> 2 -> 3 -> None

链表的类型:

  • 单链表
  • 双链表
  • 循环链表

4. 树(Tree)结构

树是重要的非线性数据结构,二叉树是其中最常见的形式。

class TreeNode:    def __init__(self, value):        self.value = value        self.left = None        self.right = None# 构建简单二叉树root = TreeNode(1)root.left = TreeNode(2)root.right = TreeNode(3)root.left.left = TreeNode(4)root.left.right = TreeNode(5)# 递归前序遍历def preorder(node):    if node:        print(node.value)        preorder(node.left)        preorder(node.right)preorder(root)  # 输出: 1 2 4 5 3

树的常见类型:

  • 二叉树
  • 二叉搜索树(BST)
  • AVL树(平衡二叉搜索树)
  • 堆(完全二叉树)

数据结构的选择与性能分析

1. 时间复杂度比较

操作

列表

字典

集合

插入

O(n)

O(1)

O(1)

删除

O(n)

O(1)

O(1)

查找

O(n)

O(1)

O(1)

访问元素

O(1)

O(1)

后端二维数组(必须要掌握的几种Python数据结构)

N/A

2. 数据结构选择

  • 需要有序数据:列表或元组
  • 快速查找:字典或集合
  • 唯一元素:集合
  • 键值关联:字典
  • 后进先出:栈
  • 先进先出:队列
  • 层次关系:树结构

3. 应用案例

案例1:使用字典统计词频

def word_count(text):    counts = {}    for word in text.split():        counts[word] = counts.get(word, 0) + 1    return countstext = "Python is great and Python is easy"print(word_count(text))# 输出: {'Python': 2, 'is': 2, 'great': 1, 'and': 1, 'easy': 1}

案例2:使用集合找出共同好友

alice_friends = {"Bob", "Charlie", "Diana"}bob_friends = {"Alice", "Charlie", "Eve"}common_friends = alice_friends.intersection(bob_friends)print(common_friends)  # {'Charlie'}

数据结构进阶

1. 不可变数据结构

Python中的不可变数据结构(如元组、字符串)在多线程环境下更安全,且可以作为字典的键。

# 使用元组作为字典键locations = {    (35.6895, 139.6917): "Tokyo",    (40.7128, -74.0060): "New York"}print(locations[(35.6895, 139.6917)])  # Tokyo

2. 内存视图与高效数据处理

对于大型数据集,可以使用memoryviewarray模块减少内存消耗。

import array# 使用数组代替列表存储大量数值numbers = array.array('i', [1, 2, 3, 4, 5])  # 'i'表示有符号整数print(numbers  # 1

3. 数据结构的扩展库

  • NumPy数组:科学计算的高效多维数组
  • Pandas DataFrame:表格数据处理
  • NetworkX:图结构处理


如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

最新文章

热门文章

本栏目文章