收藏!!从入门到精通,9 个python数据结构

收藏!!从入门到精通,9 个python数据结构

数据结构是编程中至关重要的组成部分.选择合适的数据结构可以显著提高程序的效率.本文将介绍九种常见的数据结构,并通过示例和分析来帮助你从入门到精通这些数据结构.

1. 列表 (List)

描述

列表是 Python 中最基础的数据结构之一.它是一个有序的集合,可以包含任意类型的元素,并且元素可以重复.

示例


# 创建一个列表
my_list = [1, 2, 3, 4, 5]

# 访问列表中的元素
print(my_list[0])  # 输出: 1

# 修改列表中的元素
my_list[1] = 10

# 添加元素
my_list.append(6)

# 删除元素
my_list.remove(3)

print(my_list)  # 输出: [1, 10, 4, 5, 6]

分析

列表是 Python 中最常用的数据结构之一.它的优点在于可以灵活地存储不同类型的数据,并且提供了强大的内建方法来操作数据.然而,由于其有序特性,列表在插入和删除操作中可能会有性能问题,特别是在处理大量数据时.

2. 元组 (Tuple)

描述

元组是一个不可变的有序集合.一旦创建,元组的元素不能被更改.适用于需要确保数据不被修改的场景.

示例


# 创建一个元组
my_tuple = (1, 2, 3, 4, 5)

# 访问元组中的元素
print(my_tuple[2])  # 输出: 3

# 尝试修改元素将引发错误
# my_tuple[1] = 10  # TypeError: 'tuple' object does not support item assignment

print(my_tuple)  # 输出: (1, 2, 3, 4, 5)

分析

元组的主要优点是其不可变性,保证了数据的完整性.它们通常比列表更具性能优势,特别是在读取数据时.然而,由于不能修改,元组不适合需要动态更新数据的场景.

3. 集合 (Set)

描述

集合是一个无序的、不重复的元素集合.适用于需要去除重复项或进行集合运算的场景.

示例


# 创建一个集合
my_set = {1, 2, 3, 4, 5}

# 添加元素
my_set.add(6)

# 删除元素
my_set.discard(4)

# 集合运算
another_set = {4, 5, 6, 7, 8}
union_set = my_set | another_set  # 并集
intersection_set = my_set & another_set  # 交集

print(my_set)  # 输出: {1, 2, 3, 5, 6}
print(union_set)  # 输出: {1, 2, 3, 4, 5, 6, 7, 8}
print(intersection_set)  # 输出: {5, 6}

分析

集合在去重和集合运算(如并集、交集、差集)方面表现优异.由于集合是无序的,它们不支持索引操作.对于需要集合运算或唯一性保障的场景,集合是一个理想的选择.

4. 字典 (Dictionary)

描述

字典是一个无序的键值对集合.每个键在字典中是唯一的.适用于需要通过键快速查找值的场景.

示例


# 创建一个字典
my_dict = {'name''Alice''age': 30, 'city''New York'}

# 访问字典中的值
print(my_dict['name'])  # 输出: Alice

# 修改字典中的值
my_dict['age'] = 31

# 添加新的键值对
my_dict['job'] = 'Engineer'

# 删除键值对
del my_dict['city']

print(my_dict)  # 输出: {'name': 'Alice', 'age': 31, 'job': 'Engineer'}

分析

字典提供了快速的键值查找功能,其操作平均时间复杂度为 O(1).它们适用于需要频繁查找和更新的场景.由于字典是无序的,无法按插入顺序访问键值对,但在 Python 3.7 及以上版本中,字典保持了插入顺序.

5. 队列 (Queue)

描述

队列是一种先进先出(FIFO)的数据结构.可以通过 collections.deque 来实现队列.

示例


from collections import deque

# 创建一个队列
queue = deque([1, 2, 3])

# 入队
queue.append(4)

# 出队
item = queue.popleft()

print(queue)  # 输出: deque([2, 3, 4])
print(item)   # 输出: 1

分析

队列在需要按照顺序处理数据的场景中非常有用,如任务调度和广度优先搜索.deque 提供了高效的头尾操作,避免了 Python 列表在处理大型数据时的性能问题.

6. 栈 (Stack)

描述

栈是一种先进后出(LIFO)的数据结构.可以通过列表来实现栈,或者使用 collections.deque.

示例


# 使用列表实现栈
stack = [1, 2, 3]

# 入栈
stack.append(4)

# 出栈
item = stack.pop()

print(stack)  # 输出: [1, 2, 3]
print(item)   # 输出: 4

分析

栈在需要后进先出的数据处理场景中非常有用,如递归调用和表达式求值.使用列表实现栈时,appendpop 操作都是 O(1) 的时间复杂度.

7. 链表 (Linked List)

描述

链表是一种由节点组成的数据结构,每个节点包含数据和指向下一个节点的引用.Python 中没有内建链表实现,但可以自定义.

示例


class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
        else:
            current = self.head
            while current.next:
                current = current.next
            current.next = new_node

    def display(self):
        elements = []
        current = self.head
        while current:
            elements.append(current.data)
            current = current.next
        print(elements)

# 使用链表
ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
ll.display()  # 输出: [1, 2, 3]

分析

链表在插入和删除操作中性能优越,特别是在不需要随机访问的场景.然而,链表的内存开销较大,因为每个节点都需要存储额外的指针.链表不适合需要频繁随机访问的场景.

8. 二叉树 (Binary 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)

分析

二叉树在表达层次关系和进行分支决策时非常有效.二叉搜索树(BST)是二叉树的一种特殊形式,支持高效的查找、插入和删除操作.然而,二叉树的复杂性增加,可能会导致性能问题,因此需要平衡策略(如 AVL 树或红黑树)来优化性能.

9. 图 (Graph)

描述

图是一种由节点和边组成的数据结构.图可以是有向图或无向图,用于表达复杂的关系和网络结构.

示例


class Graph:
    def __init__(self):
        self.graph = {}

    def add_edge(self, u, v):
        if u not in self.graph:
            self.graph[u] = []
        if v not in self.graph:
            self.graph[v] = []
        self.graph[u].append(v)
        self.graph[v].

原创文章不易,求点赞、在看、转发或留言,这样对我创作下一个精美文章会有莫大的动力!


原文始发于微信公众号(python小胡子):收藏!!从入门到精通,9 个python数据结构

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/303291.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!