Python 数据结构全解析,从基础到实战

news/2025/3/16 9:44:17/文章来源:https://www.cnblogs.com/yoyoliwu/p/18774595

Python 作为一门强大的编程语言,其丰富的数据结构是其受欢迎的关键原因之一。掌握这些数据结构不仅能提高代码效率,更能解决复杂问题。本文将系统梳理 Python 数据结构体系,从原始类型到复杂的自定义结构,并通过简洁案例展示其应用精髓。

以下是对Python数据结构的详细讲解:

一、列表(List)

(一)定义和特点

列表是Python中最常用的数据结构之一。它是一个有序的元素序列,用方括号[]表示,元素之间用逗号分隔。列表中的元素可以是不同类型的数据,如整数、字符串、浮点数等。

# 创建一个列表
my_list = [1, "hello", 3.14, True]

列表具有以下特点:

  • 可变性:列表是可变的(Mutable),即可以在创建后对其进行修改,如添加、或删除修改元素。
  • 有序性:列表中的元素是有顺序的,可以通过索引来访问特定位置的元素。
  • 允许重复元素:列表中可以包含重复的元素。

(二)常见操作

  1. 访问元素:通过索引访问列表中的元素,索引从0开始。

    print(my_list[0])  # 输出 1
    
  2. 添加元素

    • 使用append()方法在列表末尾添加一个元素。
      my_list.append(100)
      
    • 使用insert()方法在指定位置插入一个元素。
      my_list.insert(1, "Python")
      
  3. 删除元素

    • 使用remove()方法删除列表中第一个匹配的元素。
      my_list.remove("hello")
      
    • 使用pop()方法删除指定索引位置的元素,并返回该元素。
      popped_element = my_list.pop(2)
      
  4. 修改元素:直接通过索引赋值来修改指定位置的元素。

    my_list[0] = 2
    
  5. 列表连接:使用+运算符可以将两个列表连接成一个新列表。

    list1 = [1, 2, 3]
    list2 [ =4, 5, 6]
    combined_list = list1 + list2  # 结果为 [1, 2, 3, 4, 5, 6]
    

二、元组(Tuple)

(一)定义和特点

元组与列表类似,也是一个有序的元素序列,用圆括号()表示。元组中的元素也可以是不同类型的数据,但元组是不可变的(Immutable),即一旦创建后,不能对其进行修改。

# 创建一个元组
my_tuple = (1, "hello", 3.14, True)

元组具有以下特点:

  • 不可变性:元组不能被修改,不能添加、删除或修改元素。
  • 有序性:元组中的元素是有顺序的,可以通过索引来访问特定位置的元素。
  • 允许重复元素:元组中可以包含重复的元素。

(二)常见操作

  1. 访问元素:与列表类似,通过索引访问元组中的元素。

    print(my_tuple[1])  # 输出 "hello"
    
  2. 元组解包:可以将元组中的元素解包到多个变量中。

    a, b, c, d = my_tuple
    print(a, b, c, d)  # 输出 1 hello 3.14 True
    

三、字典(Dictionary)

(一)定义和特点

字典是一个无序的键值对(Key-Value Pair)集合,用大括号{}表示。每个键值对由一个键和一个值组成,键和值之间用冒号:分隔,键值对之间用逗号分隔。

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

字典具有以下特点:

  • 无序性:字典中的元素是无序的,不能通过索引来访问元素。
  • 可变性:字典是可变的,可以在创建后添加、删除或修改键值对。
  • 键的唯一性:字典中的键必须是唯一的,不能有重复的键。

(二)常见操作

  1. 访问元素:通过键来访问字典中的值。

    print(my_dict["name"])  # 输出 "Alice"
    
  2. 添加键值对:直接通过新的键赋值来添加键值对。

    my_dict["country"] = "USA"
    
  3. 删除键值对

    • 使用del语句删除指定的键值对。
      del my_dict["age"]
      
    • 使用pop()方法删除指定键值对,并返回该值。
      removed_value = my_dict.pop("city")
      
  4. 获取所有键、值或键值对

    • 使用keys()方法获取所有键。
      keys = my_dict.keys()
      
    • 使用values()方法获取所有值。
      values = my_dict.values()
      
    • 使用items()方法获取所有键值对。
      items = my_dict.items()
      

四、集合(Set)

(一)定义和特点

集合是一个无序的不重复元素集合,用大括号{}set()函数表示。集合中的元素是唯一的,不能有重复的元素。

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

集合具有以下特点:

  • 无序性:集合中的元素是无序的,不能通过索引来访问元素。
  • 可变性:集合是可变的,可以在创建后添加、删除元素。
  • 元素唯一性:集合中的元素必须是唯一的,不能有重复的元素。

(二)常见操作

  1. 添加元素

    • 使用add()方法添加一个元素。
      my_set.add(6)
      
    • 使用update()方法添加多个元素。
      my_set.update([7, 8, 9])
      
  2. 删除元素

    • 使用remove()方法删除指定元素。如果元素不存在,会引发错误。
      my_set.remove(3)
      
    • 使用discard()方法删除指定元素。如果元素不存在,不会引发错误。
      my_set.discard(10)
      
  3. 集合运算

    • 并集:使用union()方法或|运算符获取两个集合的并集。
      set1 = {1, 2, 3}
      set2 = {3, 4, 5}
      union_set = set1.union(set2)  # 或 set1 | set2
      
    • 交集:使用intersection()方法或&运算符获取两个集合的交集。
      intersection_set = set1.intersection(set2)  # 或 set1 & set2
      
    • 差集:使用difference()方法或-运算符获取两个集合的差集。
      difference_set = set1.difference(set2)  # 或 set1 - set2
      

五、字符串(String)

(一)定义和特点

字符串是由字符组成的序列,用单引号' '或双引号" "表示。字符串是不可变的(Immutable),即一旦创建后,不能对其进行修改。

# 创建一个字符串
my_string = "Hello, World!"

字符串具有以下特点:

  • 不可变性:字符串不能被修改,不能添加、删除或修改字符。
  • 有序性:字符串中的字符是有顺序的,可以通过索引来访问特定位置的字符。
  • 允许重复字符:字符串中可以包含重复的字符。

(二)常见操作

  1. 访问字符:通过索引访问字符串中的字符。

    print(my_string[0])  # 输出 'H'
    
  2. 字符串拼接:使用+运算符可以将两个字符串拼接成一个新字符串。

    str1 = "Hello"
    str2 = "World"
    combined_str = str1 + " " + str2  # 结果为 "Hello World"
    
  3. 字符串长度:使用len()函数获取字符串的长度。

    length = len(my_string)
    
  4. 字符串方法

    • 查找子字符串:使用find()方法查找子字符串的位置。
      index = my_string.find("World")
      
    • 替换子字符串:使用replace()方法替换子字符串。
      new_string = my_string.replace("World", "Python")
      
    • 分割字符串:使用split()方法将字符串分割成列表。
      words = my_string.split(" ")
      

六、数组(Array)

(一)定义和特点

数组是一种线性数据结构,用于存储相同类型的元素。在Python中,数组可以通过array模块来创建,数组中的元素必须是相同类型的数据。

import array as arr# 创建一个整数数组
my_array = arr.array('i', [1, 2, 3, 4, 5])

数组具有以下特点:

  • 相同类型元素:数组中的元素必须是相同类型的数据。
  • 可变性:数组是可变的,可以在创建后添加、删除或修改元素。
  • 有序性:数组中的元素是有顺序的,可以通过索引来访问特定位置的元素。

(二)常见操作

  1. 访问元素:通过索引访问数组中的元素。

    print(my_array[2])  # 输出 3
    
  2. 添加元素

    • 使用append()方法在数组末尾添加一个元素。
      my_array.append(6)
      
    • 使用extend()方法在数组末尾添加多个元素。
      my_array.extend([7, 8, 9])
      
  3. 删除元素

    • 使用remove()方法删除数组中第一个匹配的元素。
      my_array.remove(3)
      
    • 使用pop()方法删除指定索引位置的元素,并返回该元素。
      popped_element = my_array.pop(1)
      
  4. 修改元素:直接通过索引赋值来修改指定位置的元素。

    my_array[0] = 10
    

七、数据结构的比较和选择

在选择合适的数据结构时,需要考虑以下因素:

  • 数据的有序性:如果需要保持元素的顺序,可以选择列表或字符串;如果不需要保持顺序,可以选择集合或字典。
  • 数据的可变性:如果需要在创建后修改数据,可以选择列表、字典、集合或数组;如果不需要修改,可以选择元组或字符串。
  • 数据的唯一性:如果需要存储唯一的元素,可以选择集合;如果允许重复元素,可以选择列表、元组、字符串或数组。
  • 数据的类型:如果需要存储相同类型的元素,可以选择数组;如果允许不同类型的元素,可以选择列表、元组、字典或集合。

通过合理选择和使用不同的数据结构,可以有效地组织和操作数据,提高程序的性能和可读性。
文章来源于zlibrary图书馆中《python入门》书的Python数据结构全解析章节内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899687.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9图看2025中国新质生产力发展举措

发展新质生产力,政府工作报告这样说: ①推动商业航天、低空经济等新兴产业安全健康发展 ②培育生物制造、量子科技、具身智能、6G等未来产业 ③促进专精特新中小企业发展壮大,支持独角兽企业、瞪羚企业发展 ④支持大模型广泛应用 ⑤大力发展智能网联新能源汽车、人工智能手机…

manim边学边做--三维图形的场景类

在Manim中,ThreeDScene是一个专门为三维场景设计的类。 它通过配置三维相机、支持复杂的相机运动以及管理物体与相机的交互关系,为科学可视化、工程仿真、数学教育等领域提供了强大的工具。 典型应用场景包括:三维几何图形的动态演示(如旋转立方体、莫比乌斯环) 物理过程的…

第三章 准确估算的价值

3.1 高估更好还是低估更好 3.1.1 反对高估的观点 管理人员和其他项目干系人有时会担心,如果项目被高估了,帕金森法则就会起作用——也就是所有可以用来完成工作的时间都会被浪费掉。因此,为了避免帕金森法则,某些管理人员会有意识地 "压缩" 这估算值。 另一个顾虑…

Windows中conda的安装与使用

下载安装miniconda 说明: Miniconda是一款管理python环境的软件工具 第一步:下载miniconda 代码如下: win+r后,输入cmd指令按回车 在终端中输入: curl https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.12.0-Windows-x86_64.exe --output 按照…

CHT 另解

引入 CHT 又叫 凸包优化,是一种利用一次函数(斜率)来优化 Dp 的一种方法。 它的独特之处在于,传统斜率优化依靠的是一个一个的点,而凸包优化是利用一条条直线来优化,省去了一些码量。 我们用一道例题引入。 例1 HDU-3480 Dp 暴力 Link 题目是说,将 \(n\) 个数划分到 \(m…

PHP 发送电子邮件 功能 用法运用 详解

PHP发送电子邮件功能、用法及运用详解 一、PHP发送电子邮件的基本概述 PHP提供了多种方式来发送电子邮件,其中最常用的方法是使用内置的mail()函数或通过SMTP(Simple Mail Transfer Protocol)协议。随着技术的发展,许多开发者更倾向于使用第三方库(如PHPMailer)来增强邮件…

Linux 离线安装 zstd

前言:本文操作是在 CentOS-7 下执行的,不确定在其他 Linux 发布版是否能同样正常执行。1、检查前置依赖组件在安装 zstd 之前,需要确认已安装了相关依赖组件: gcc 。 rpm -qa | grep gcc前置依赖组件的具体离线安装方法请参考:CentOS-7离线安装gcc 2、下载zstd安装包 官方…

HarmonyOS Next开发教程之地图定位

今天分享一下在鸿蒙开发中的地图定位问题,也就是在地图中如何定位自己所在的位置。 关于如何加载显示地图在之前的文章已经详细介绍过,有问题的友友可以点击查看: HarmonyOS NEXT实战教程-实现Keep运动轨迹 将地图定位到自己所在的位置,有几种方法: 一种是在初始化地图前先…

HarmonyOS Next实战教程:实现中间凹陷的异形tabbar

今天要和大家分享的实战案例是实现中间凹陷的tabar前些天在做墨迹天气的时候看到了这种异形的tabbar,看起来比较有挑战性,因为鸿蒙版的墨迹天气app还没有这个东西,我决定尝试做一下。 系统的Tabs肯定是不行了,我们需要自定义。 难度直接拉满,直接做最难的部分,就是这个中…

HarmonyOS NEXT实战:高仿墨迹天气开发手记(附源码)

老余说3月份的神秘产品是为纯血鸿蒙而生的一款全新形态的手机,别人想象不到的手机产品,这次的保密工作真是非常到位,让人十分期待。 闲言少叙,今天为大家分享新年的第一个实战项目,高仿墨迹天气 这个项目中有一些复杂的动效和曲线,对于新手友友来说可能会有一点难,不过没…

VSCode + CMake + MinGW 在 Windows 下的简易调试指南

VSCode + CMake + MinGW 在 Windows 下的简易调试指南 目录VSCode + CMake + MinGW 在 Windows 下的简易调试指南准备工作下载VSCode下载CMake下载MinGW待编译源码VSCode调试task.json 配置launch.json 配置开始调试鉴于网络上关于VSCode的调试的教程不多,并且掺杂着大量的随机…

指令集并行与开发进阶算法

进阶算法 基础算法无法解决中断恢复的问题,即假如有两个写寄存器的操作,指令1,指令2,可能乱序执行时指令2的结果已经将写回了寄存器,但是指令1还未执行,此时发生中断后,从指令1重新开始执行,就会重新进行两次写入,将会发生错误。 只要保证后面指令修改机器状态时, 前面…