当前位置: 首页 > ops >正文

数据结构基础知识补充

一、列表(List)

✅ 定义与特点:

a = [1, "str", True]

  • 有序、可变

  • 支持增删改查(append, remove, insert, pop 等)

  • 元素类型不限制

  • 底层为动态数组

🧠 实际开发例子:

  1. 批量存储用户输入

    user_inputs = [] for _ in range(3): user_inputs.append(input("Enter a value: "))

  2. 处理 CSV 数据行

    import csv with open("data.csv") as f: reader = csv.reader(f) rows = [row for row in reader]

👍 优点:

  • 灵活,能存储任意类型

  • 操作丰富,语法简洁

👎 缺点:

  • 查找慢(O(n))

  • 占内存比 array 大

  • 不适合大规模数值计算(推荐用 numpy)


二、元组(Tuple)

✅ 定义与特点:

b = (1, "data", 3.14)

  • 有序、不可变

  • 支持索引访问

  • 可作为 dict 的键

🧠 实际开发例子:

  1. 函数多返回值

    def get_stats(): return (200, "OK") status_code, message = get_stats()

  2. 缓存系统中的复合键

    cache = {} user_id, item_id = 42, 100 cache[(user_id, item_id)] = "cached_result"

👍 优点:

  • 数据安全,不易被修改

  • 可用于 dict key、set 元素

👎 缺点:

  • 无法修改,需整体替换

  • 可读性差于命名元组(建议用 namedtuple


三、字典(Dict / 哈希表)

✅ 定义与特点:

c = {"name": "Alice", "age": 30}

  • 无序(Python 3.7+ 实际有序)

  • 键必须可哈希(如 str、int、tuple)

  • 查找速度快,O(1)

🧠 实际开发例子:

  1. JSON 数据处理

    import json user_data = json.loads('{"id": 1, "name": "Tom"}')

  2. 配置文件解析

    config = {"host": "localhost", "port": 8080}

  3. 计数器功能

    counts = {} for item in ['a', 'b', 'a']: counts[item] = counts.get(item, 0) + 1

👍 优点:

  • 快速键值映射

  • 语义清晰(键名表达含义)

👎 缺点:

  • 键要求不可变对象

  • 内存占用较大


四、数组(array.array)

✅ 定义与特点:

import array d = array.array('i', [1, 2, 3])

  • 元素类型统一(如整数 'i'

  • 占用内存少,操作快

  • 不支持混合类型

🧠 实际开发例子:

  1. 从传感器读取大量整数数据

    import array sensor_data = array.array('h') # short 类型 sensor_data.frombytes(serial_input.read(64))

  2. 高效存储图片像素值

    grayscale_pixels = array.array('B', [0, 128, 255])

👍 优点:

  • 节省内存(比 list 更轻)

  • 性能高于 list(但低于 NumPy)

👎 缺点:

  • 类型固定

  • 使用不如 list 灵活


五、哈希表(由 Dict 实现)

✅ 定义与特点:

  • 哈希表并非 Python 原语,但 dict 是其直接实现

  • 基于哈希函数进行快速键值定位

🧠 实际开发例子:

  1. URL 缓存系统

    cache = {} def get_page(url): if url in cache: return cache[url] response = fetch_url(url) cache[url] = response return response

  2. 计数和分组操作

    from collections import defaultdict groups = defaultdict(list) for name, dept in employees: groups[dept].append(name)

👍 优点:

  • 极快的查找和插入(O(1))

  • 基础结构强大,支持多种映射用途

👎 缺点:

  • 哈希冲突需处理

  • 键必须是可哈希对象


六、对比总结表格:

特性listtupledictarrayhash table
可变性✅(但元素类型固定)✅(底层实现)
有序性✅(3.7+)
元素类型任意任意键值任意限定(如整数)限定键需可哈希
查找性能O(n)O(n)O(1)O(n)O(1)
内存效率一般较高较高
适用场景一般集合固定数据映射存储数值密集型快速检索

🔚 建议使用场景小结:

任务类型推荐结构原因
有序集合,需要频繁修改list灵活易用
多值返回,不可修改tuple安全性高,支持解构
需要键值存储,频繁查找dict查找快,结构清晰
数值密集型,如图像、传感器数据array / numpy节省内存,性能好
快速索引,缓存优化dict (哈希表)支持 O(1) 访问,广泛用于缓存等高性能应用

http://www.xdnf.cn/news/9037.html

相关文章:

  • leetcode刷题日记——求根节点到叶节点数字之和
  • Python数据分析基础(一)
  • vue3自定义指令来实现 v-lazyImg 功能
  • IP地址查询的重要性
  • 01 NLP的发展历程和挑战
  • 第2章 程序设计语言基础知识
  • C#编解码:Base64扩展类的实现与应用
  • 人工智能如何协助老师做课题
  • 电子电路:什么是感应电动势?
  • C++ 模板函数深度指南
  • 【CF】Day66——Edu 168.D + CF 853 (Div. 2).C (树 + 二分 + 贪心 | 组合数学)
  • 佰力博科技与您探讨铁电分析仪具有哪些测试功能
  • [PyMySQL]
  • reflect-metadata作用
  • Ubuntu | NVIDIA 驱动、CUDA 与 cuDNN 的安装与配置 / 常见问题及解决方法
  • Zabbix集成Grfana自定义仪表盘
  • World of Warcraft [CLASSIC] Jewelcrafting Gemstone 3 [80 WLK]
  • 初等数论--Garner‘s 算法
  • 邻近标记技术(PL):探索生物分子相互作用的前沿工具
  • Java设计模式之适配器模式
  • AI时代新词-多模态(Multimodal)
  • 测评机构如何通过漏扫保障软件安全?扫描范围与局限解析
  • leetcode:2235. 两整数相加(python3解法,数学相关算法题)
  • 十六进制字符转十进制算法
  • C++——STL——unordered_map与unordered_set的使用以及使用哈希表封装unordered_map/set
  • https的进化之路(八卦版)
  • JVM 深度解析
  • k-way Hypergraph Partitioning via n-Level Recursive Bisection【2016 ALENEX】文献总结
  • N2语法 时间
  • 协同过滤实现电影推荐