欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Python中的其他数据结构:除了列表和元组,还有哪些?

Python中的其他数据结构:除了列表和元组,还有哪些?

2025/6/20 16:59:53 来源:https://blog.csdn.net/2409_88836436/article/details/148699640  浏览:    关键词:Python中的其他数据结构:除了列表和元组,还有哪些?

在Python中,除了列表(list)和元组(tuple),还有许多其他内置的数据结构,每种都有其独特的特性和用途。了解这些数据结构可以帮助你在不同的场景中选择最合适的一种,从而提高代码的效率和可读性。今天,就让我们一起探索Python中的其他常用数据结构。

一、字典(dict

特点

  • 键值对存储:字典是一种键值对(key-value)的数据结构,通过键来访问对应的值。
  • 无序:字典中的键值对没有固定的顺序(Python 3.7+ 保证插入顺序)。
  • 可变:字典是可变的,可以随时添加、删除或修改键值对。
  • 键必须是不可变类型:键可以是数字、字符串、元组等不可变类型,但不能是列表或其他可变类型。

示例

my_dict = {"name": "Alice", "age": 30, "role": "Developer"}
print(my_dict["name"])  # 输出:Alice
my_dict["age"] = 31
my_dict["city"] = "New York"
print(my_dict)  # 输出:{'name': 'Alice', 'age': 31, 'role': 'Developer', 'city': 'New York'}

使用场景

  • 存储配置信息:例如用户信息、系统配置等。
  • 快速查找:通过键快速访问对应的值,适合需要频繁查找的场景。

二、集合(set

特点

  • 无序集合:集合是一个无序的元素集合,每个元素都是唯一的。
  • 可变:集合是可变的,可以随时添加或删除元素。
  • 去重:集合自动去除重复元素。

示例

my_set = {1, 2, 3, 4}
my_set.add(5)
my_set.remove(2)
print(my_set)  # 输出:{1, 3, 4, 5}

使用场景

  • 去重:自动去除重复元素,适合需要去重的场景。
  • 集合运算:支持并集、交集、差集等集合运算,适合处理集合关系。

三、队列(queue.Queue

特点

  • 先进先出:队列是一种先进先出(FIFO)的数据结构,新元素从队尾加入,旧元素从队头移出。
  • 线程安全queue.Queue 是线程安全的,适合多线程环境。

示例

from queue import Queuemy_queue = Queue()
my_queue.put(1)
my_queue.put(2)
print(my_queue.get())  # 输出:1
print(my_queue.get())  # 输出:2

使用场景

  • 任务队列:适合处理任务队列,例如在多线程环境中管理任务。
  • 先进先出场景:例如打印任务队列、消息队列等。

四、栈(listcollections.deque

特点

  • 后进先出:栈是一种后进先出(LIFO)的数据结构,新元素从栈顶加入,旧元素也从栈顶移出。
  • 可变:栈是可变的,可以随时添加或删除元素。

示例

my_stack = []
my_stack.append(1)
my_stack.append(2)
print(my_stack.pop())  # 输出:2
print(my_stack.pop())  # 输出:1

或者使用 collections.deque

from collections import dequemy_stack = deque()
my_stack.append(1)
my_stack.append(2)
print(my_stack.pop())  # 输出:2
print(my_stack.pop())  # 输出:1

使用场景

  • 函数调用栈:适合模拟函数调用栈。
  • 后进先出场景:例如浏览器的后退功能、括号匹配等。

五、collections 模块中的高级数据结构

Python 的 collections 模块提供了许多高级数据结构,这些结构在某些场景下非常有用。

1. collections.Counter

  • 特点:用于计数的字典,自动统计元素的出现次数。
  • 示例
    from collections import Countermy_list = [1, 2, 2, 3, 3, 3, 4]
    counter = Counter(my_list)
    print(counter)  # 输出:Counter({3: 3, 2: 2, 1: 1, 4: 1})
    

2. collections.defaultdict

  • 特点:提供默认值的字典,当访问不存在的键时,自动创建默认值。
  • 示例
    from collections import defaultdictmy_dict = defaultdict(int)
    print(my_dict["key"])  # 输出:0
    

3. collections.OrderedDict

  • 特点:有序字典,保持插入顺序(Python 3.7+ 的普通字典也保证插入顺序)。
  • 示例
    from collections import OrderedDictmy_dict = OrderedDict([("name", "Alice"), ("age", 30)])
    print(my_dict)  # 输出:OrderedDict([('name', 'Alice'), ('age', 30)])
    

4. collections.namedtuple

  • 特点:创建具名元组,使元组中的元素可以通过名称访问。
  • 示例
    from collections import namedtuplePoint = namedtuple("Point", ["x", "y"])
    p = Point(11, y=22)
    print(p.x)  # 输出:11
    print(p.y)  # 输出:22
    

六、heapq 模块

特点

  • 堆队列heapq 模块提供了堆队列算法,也称为优先队列。
  • 最小堆:默认是一个最小堆,堆顶元素总是最小的。

示例

import heapqmy_heap = []
heapq.heappush(my_heap, 3)
heapq.heappush(my_heap, 1)
heapq.heappush(my_heap, 2)
print(heapq.heappop(my_heap))  # 输出:1
print(heapq.heappop(my_heap))  # 输出:2
print(heapq.heappop(my_heap))  # 输出:3

使用场景

  • 优先队列:适合需要按优先级处理任务的场景。
  • 最小值/最大值查询:例如实时获取数据流中的最小值或最大值。

七、array 模块

特点

  • 数组array 模块提供了高效的数组存储,适合存储大量同类型数据。
  • 类型化:数组中的元素必须是同一种类型,例如整数或浮点数。

示例

import arraymy_array = array.array("i", [1, 2, 3, 4])
print(my_array[0])  # 输出:1
my_array.append(5)
print(my_array)  # 输出:array('i', [1, 2, 3, 4, 5])

使用场景

  • 高效存储:适合存储大量同类型数据,例如图像处理中的像素值。
  • 性能优化:比列表更节省内存,适合处理大规模数据。

八、bisect 模块

特点

  • 二分查找bisect 模块提供了二分查找和插入的功能,适合有序列表。
  • 高效查找:在有序列表中快速查找或插入元素。

示例

import bisectmy_list = [1, 2, 4, 5]
bisect.insort(my_list, 3)
print(my_list)  # 输出:[1, 2, 3, 4, 5]

使用场景

  • 有序数据:适合需要频繁查找或插入有序数据的场景。
  • 性能优化:比线性查找更高效,适合大规模有序数据。

九、dataclasses 模块(Python 3.7+)

特点

  • 数据类dataclasses 模块提供了简化类定义的功能,适合存储数据的类。
  • 自动实现方法:自动实现__init____repr____eq__等方法。

示例

from dataclasses import dataclass@dataclass
class Point:x: inty: intp = Point(11, 22)
print(p)  # 输出:Point(x=11, y=22)

使用场景

  • 数据存储:适合需要存储数据的类,例如配置信息、用户信息等。
  • 简化代码:减少样板代码,提高代码可读性。

十、enum 模块(Python 3.4+)

特点

  • 枚举enum 模块提供了枚举类,适合定义一组固定的常量。
  • 类型安全:枚举值是不可变的,适合定义固定的状态或选项。

示例

from enum import Enumclass Color(Enum):RED = 1GREEN = 2BLUE = 3print(Color.RED)  # 输出:Color.RED
print(Color.RED.value)  # 输出:1

使用场景

  • 固定常量:适合定义一组固定的常量,例如状态码、颜色等。
  • 类型安全:避免使用字符串或整数作为常量,提高代码的可读性和安全性。

十一、types 模块

特点

  • 动态类型types 模块提供了动态创建类型的功能,适合需要动态生成类或函数的场景。
  • 灵活性:可以在运行时动态创建和修改类型。

示例

import typesdef create_class(name, bases, body):return types.new_class(name, bases, {}, lambda ns: ns.update(body))MyClass = create_class("MyClass", (object,), {"x": 10})
print(MyClass().x)  # 输出:10

使用场景

  • 动态生成类:适合需要动态生成类或函数的场景,例如元编程。
  • 灵活性:提供运行时动态创建和修改类型的能力。

十二、itertools 模块

特点

  • 迭代器工具itertools 模块提供了许多用于处理迭代器的工具,适合处理复杂的迭代逻辑。
  • 高效处理:提供了高效的迭代器操作,例如组合、排列、无限序列等。

示例

import itertools# 无限序列
for i in itertools.count(10):print(i)if i > 20:break# 组合
for subset in itertools.combinations([1, 2, 3, 4], 2):print(subset)

使用场景

  • 复杂迭代:适合需要处理复杂迭代逻辑的场景,例如组合、排列等。
  • 性能优化:提供高效的迭代器操作,适合处理大规模数据。

十三、functools 模块

特点

  • 函数工具functools 模块提供了许多用于处理函数的工具,适合需要对函数进行操作的场景。
  • 高效处理:提供了高效的函数操作,例如缓存、装饰器等。

示例

import functools@functools.lru_cache(maxsize=32)
def fib(n):if n < 2:return nreturn fib(n-1) + fib(n-2)print(fib(10))  # 输出:55

使用场景

  • 函数操作:适合需要对函数进行操作的场景,例如缓存、装饰器等。
  • 性能优化:提供高效的函数操作,适合处理复杂的函数逻辑。

十四、array 模块

特点

  • 高效数组array 模块提供了高效的数组存储,适合存储大量同类型数据。
  • 类型化:数组中的元素必须是同一种类型,例如整数或浮点数。

示例

import arraymy_array = array.array("i", [1, 2, 3, 4])
print(my_array[0])  # 输出:1
my_array.append(5)
print(my_array)  # 输出:array('i', [1, 2, 3, 4, 5])

使用场景

  • 高效存储:适合存储大量同类型数据,例如图像处理中的像素值。
  • 性能优化:比列表更节省内存,适合处理大规模数据。

十五、memoryview 对象

特点

  • 内存视图memoryview 对象提供了一个可变的缓冲区接口,适合处理二进制数据。
  • 高效访问:可以直接访问内存中的数据,适合处理大规模二进制数据。

示例

import arraymy_array = array.array("i", [1, 2, 3, 4])
my_memoryview = memoryview(my_array)
print(my_memoryview[0])  # 输出:1
my_memoryview[0] = 10
print(my_array)  # 输出:array('i', [10, 2, 3, 4])

使用场景

  • 二进制数据:适合处理二进制数据,例如图像处理、网络通信等。
  • 高效访问:直接访问内存中的数据,适合处理大规模数据。

十六、io 模块

牂点

  • 输入输出io 模块提供了输入输出功能,适合处理文件、网络通信等。
  • 高效处理:提供了高效的输入输出操作,适合处理大规模数据。

示例

import io# 内存中的文件对象
my_file = io.StringIO("Hello, World!")
print(my_file.read())  # 输出:Hello, World!
my_file.write("Python is awesome!")
my_file.seek(0)
print(my_file.read())  # 输出:Hello, World!Python is awesome!

使用场景

  • 文件操作:适合处理文件、网络通信等。
  • 高效处理:提供高效的输入输出操作,适合处理大规模数据。

十七、pathlib 模块

特点

  • 路径操作pathlib 模块提供了路径操作功能,适合处理文件路径、目录等。
  • 面向对象:提供了面向对象的路径操作,适合处理复杂的路径逻辑。

示例

from pathlib import Path# 获取当前路径
current_path = Path.cwd()
print(current_path)  # 输出:当前路径# 创建新文件
new_file = current_path / "new_file.txt"
new_file.touch()
print(new_file.exists())  # 输出:True

使用场景

  • 文件路径:适合处理文件路径、目录等。
  • 面向对象:提供面向对象的路径操作,适合处理复杂的路径逻辑。

十八、shelve 模块

特点

  • 持久化存储shelve 模块提供了持久化存储功能,适合存储键值对数据。
  • 高效处理:提供了高效的持久化存储操作,适合处理大规模数据。

示例

import shelve# 打开数据库
with shelve.open("my_shelve") as db:db["key"] = "value"print(db["key"])  # 输出:value

使用场景

  • 持久化存储:适合存储键值对数据,例如配置信息、用户信息等。
  • 高效处理:提供高效的持久化存储操作,适合处理大规模数据。

十九、sqlite3 模块

特点

  • 轻量级数据库sqlite3 模块提供了轻量级数据库功能,适合存储大规模数据。
  • 高效处理:提供了高效的数据库操作,适合处理复杂的查询逻辑。

示例

import sqlite3# 连接数据库
conn = sqlite3.connect("my_database.db")
cursor = conn.cursor()# 创建表
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
cursor.execute("INSERT INTO users (name) VALUES ('Alice')")
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())  # 输出:[(1, 'Alice')]# 关闭连接
conn.close()

使用场景

  • 轻量级数据库:适合存储大规模数据,例如用户信息、配置信息等。
  • 高效处理:提供高效的数据库操作,适合处理复杂的查询逻辑。

二十、json 模块

特点

  • JSON操作json 模块提供了JSON操作功能,适合处理JSON数据。
  • 高效处理:提供了高效的JSON操作,适合处理大规模数据。

示例

import json# 序列化
data = {"name": "Alice", "age": 30}
json_str = json.dumps(data)
print(json_str)  # 输出:{"name": "Alice", "age": 30}# 反序列化
data = json.loads(json_str)
print(data)  # 输出:{'name': 'Alice', 'age': 30}

使用场景

  • JSON数据:适合处理JSON数据,例如API通信、配置文件等。
  • 高效处理:提供高效的JSON操作,适合处理大规模数据。

总结

Python提供了丰富多样的数据结构,每种都有其独特的特性和适用场景。除了列表和元组,还有字典、集合、队列、栈、collections模块中的高级数据结构、heapq模块、array模块、bisect模块、dataclasses模块、enum模块、types模块、itertools模块、functools模块、array模块、memoryview对象、io模块、pathlib模块、shelve模块、sqlite3模块、json模块等。

选择合适的数据结构可以让你的代码更加高效、安全且易于维护。希望这篇文章能帮助你在Python开发中更好地选择合适的数据结构!如果你还有其他问题或经验,欢迎在评论区留言,我们一起交流。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词