【Python数据结构】深入理解Python中的列表、字典和集合!

news2024/12/23 20:34:31

【Python数据结构】深入理解Python中的列表、字典和集合!

在Python编程中,数据结构是处理和组织数据的核心部分。Python提供了许多内置的数据结构,如列表、字典和集合,它们为程序员提供了灵活、高效的数据管理方式。本篇博客将深入探讨Python中的这些常用数据结构,理解它们的特点、使用场景,以及如何编写高效的代码来处理这些结构。
在这里插入图片描述

一、Python中的列表(List)

1. 列表的定义和特性

列表(List)是Python中最常用的数据结构之一。它是一个有序、可变的集合,可以包含任意类型的对象,如数字、字符串、其他列表等。

定义列表:

# 定义一个空列表
my_list = []

# 定义一个包含多个元素的列表
my_list = [1, 2, 3, 'Python', True]

列表的特点

  • 有序:列表中的元素有确定的顺序,可以通过索引访问元素。
  • 可变:可以动态添加、删除或修改列表中的元素。
  • 支持任意类型的元素:列表中的元素可以是不同类型的数据,如整数、字符串、对象等。
2. 列表的常用操作
  1. 访问列表元素
my_list = ['a', 'b', 'c', 'd']
print(my_list[0])  # 输出:a
print(my_list[-1]) # 输出:d (负索引从列表末尾开始计数)
  1. 修改列表元素
my_list[1] = 'new value'
print(my_list)  # 输出:['a', 'new value', 'c', 'd']
  1. 列表的切片
print(my_list[1:3])  # 输出:['new value', 'c']
  1. 添加元素
  • append():在列表末尾添加一个元素
  • insert():在指定位置插入元素
my_list.append('e')
my_list.insert(2, 'x')
print(my_list)  # 输出:['a', 'new value', 'x', 'c', 'd', 'e']
  1. 删除元素
  • remove():删除第一个匹配的元素
  • pop():弹出并返回指定位置的元素
my_list.remove('x')
removed_element = my_list.pop(0)
print(removed_element)  # 输出:a
  1. 列表的遍历
for element in my_list:
    print(element)
3. 列表的常见应用场景
  • 数据存储:用于存储有序数据,如用户输入的数值、名称等。
  • 动态数据处理:在处理用户输入、实时数据时,列表的可变性使其非常方便。
4. 列表的性能问题

列表的插入和删除操作在时间复杂度上取决于元素位置。插入或删除末尾元素的时间复杂度为O(1),而在开头或中间插入或删除元素的时间复杂度为O(n)。
在这里插入图片描述

二、Python中的字典(Dictionary)

1. 字典的定义和特性

字典(Dictionary)是一种无序的、键值对(key-value pair)的数据结构。每个键与一个值相关联,通过键可以快速查找到对应的值。

定义字典:

my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}

字典的特点

  • 无序:Python 3.7+ 中的字典按插入顺序存储元素,但不能通过索引访问。
  • 键唯一:字典中的键必须唯一,且不可变(如字符串、元组等)。
  • 可变:可以动态添加、删除或修改键值对。
2. 字典的常用操作
  1. 访问字典中的值
print(my_dict['name'])  # 输出:Alice
  1. 添加或修改键值对
my_dict['age'] = 30  # 修改
my_dict['country'] = 'USA'  # 添加
  1. 删除键值对
  • del:删除指定键值对
  • pop():删除并返回指定键的值
del my_dict['city']
removed_value = my_dict.pop('age')
print(removed_value)  # 输出:30
  1. 遍历字典
# 遍历字典的键
for key in my_dict:
    print(key)

# 遍历字典的值
for value in my_dict.values():
    print(value)

# 遍历键值对
for key, value in my_dict.items():
    print(f'{key}: {value}')
3. 字典的常见应用场景
  • 数据映射:在需要键值对关联的场景中非常有用,如存储用户信息(姓名与年龄的对应)。
  • 快速查找:字典的查找时间复杂度为O(1),适合用于快速查找的场景。
    在这里插入图片描述

三、Python中的集合(Set)

1. 集合的定义和特性

集合(Set)是一个无序的、元素唯一的数据结构,类似于数学中的集合概念。集合用于存储不重复的元素,且支持集合运算(并集、交集、差集等)。

定义集合:

my_set = {1, 2, 3, 4}
empty_set = set()  # 创建空集合

集合的特点

  • 无序:集合中的元素没有顺序。
  • 唯一性:集合中的元素不允许重复。
  • 支持集合运算:如并集、交集、差集等操作。
2. 集合的常用操作
  1. 添加元素
my_set.add(5)
print(my_set)  # 输出:{1, 2, 3, 4, 5}
  1. 删除元素
my_set.remove(3)
print(my_set)  # 输出:{1, 2, 4, 5}
  1. 集合运算
  • 并集:union()|
  • 交集:intersection()&
  • 差集:difference()-
set1 = {1, 2, 3}
set2 = {3, 4, 5}

# 并集
print(set1 | set2)  # 输出:{1, 2, 3, 4, 5}

# 交集
print(set1 & set2)  # 输出:{3}

# 差集
print(set1 - set2)  # 输出:{1, 2}
3. 集合的常见应用场景
  • 去重:当需要过滤掉重复元素时,集合是非常方便的数据结构。
  • 集合运算:在需要计算多个集合的交集、并集等场景中,集合能有效简化代码。
    在这里插入图片描述

四、总结

Python中的列表、字典和集合各自具有独特的优势,分别适用于不同的应用场景:

  • 列表:适用于需要存储有序、可重复数据的场景,且提供灵活的增删改查功能。
  • 字典:在需要快速查找、键值对映射时是非常高效的选择。
  • 集合:当需要去重和集合运算时,集合提供了简洁、快速的解决方案。

通过合理选择和使用这些数据结构,能够编写出高效、可维护的Python代码。理解它们的内部实现和使用场景,对于编写更高效的Python程序至关重要。
在这里插入图片描述

五、示例代码

# 列表操作示例
my_list = [1, 2, 3, 4, 5]
my_list.append(6)
print("列表:", my_list)

# 字典操作示例
my_dict = {'name': 'Alice', 'age': 25}
my_dict['city'] = 'New York'
print("字典:", my_dict)

# 集合操作示例
my_set = {1, 2, 3, 4}
my_set.add(5)
print("集合:", my_set)

通过理解和实践这些Python数据结构,你可以更好地优化代码,并编写出高效且具备扩展性的程序。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主键 外键

主键 外键 在关系型数据库中,主键(Primary Key)和外键(Foreign Key)是用于维护数据完整性和建立表之间关系的重要概念。 主键(Primary Key) 定义: 主键是一个或多个列的组合,其值能…

【从零开发Mybatis】引入MapperConfig.xml和Mapper映射配置

引言 学习MyBatis源码之前,了解它是如何通过JDBC查询数据库数据的基础知识是非常有用的。 上一篇我们编写了一个最简单的示例,通过JDBC查询数据库数据,从本文开始,我们将正式开始Mybatis框架的开发。 通过JDBC查询数据库数据存…

计算机网络:数据链路层 —— 共享式以太网

文章目录 共享式以太网CSMA/CD 协议CSMA/CD 协议 的基本原理 共享式以太网的争用期共享式以太网的最小帧长共享式以太网的最大帧长共享式以太网的退避算法截断二进制指数退避算法 共享二进制以太网的信道利用率使用集线器的共享式以太网10BASE-T 共享式以太网 共享式以太网是当…

微分几何-曲线论(曲线)

文章目录 曲线定义常见曲线直线圆圆柱螺线维维安尼曲线 连续曲线/光滑曲线正则曲线切向量切线方程法平面(法面) 弧长定理1:弧长公式弧长参数化定理2:任何一条正则曲线都可以使用弧长作参数.(也称弧长参数为**自然参数*…

[Linux] 逐层深入理解文件系统 (1)—— 进程操作文件

标题:[Linux] 文件系统 (1)—— 进程操作文件 个人主页水墨不写bug (图片来源于网络) 目录 一、进程与打开的文件 二、文件的系统调用与库函数的关系 1.系统调用open() 三、内存中的文件描述符表 四、缓冲区…

【Java SE 】类和对象详解

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1, 面向对象认识 1.1 什么时面向对象 1.2 面向对象和面向过程 1.2.1 一个例子理解对象和过程 1. 对于电脑来说 2. 对于我们人来说 2. 类的定…

还在为调用大模型API接口返回数据的处理问题烦恼???来看看这篇文章,解决你的烦恼!!!

大家好!我是学徒小z,今天给大家分享一下我做项目过程中遇到的一个问题。 文章目录 问题大模型接口解决方案流式返回和回调函数另一个问题1. 使用web组件2. 使用第三方库 问题 不知道大家有没有遇到这样一个问题。在调用大模型接口的时,返回…

Lnmp(mysql分离)(nginx 1.13.6+mysql5.5+php5.3)环境一键搭建

Lnmp(mysql分离)(nginx 1.13.6mysql5.5php5.3)环境一键搭建 如果对运维课程感兴趣,可以在b站上、csdn或微信视频号 上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实…

深度学习之残差网络ResNet

文章目录 1. 残差网络定义2. 数学基础函数类3. 残差块4.ResNet模型5.训练模型6.小结 1. 残差网络定义 随着我们设计的网络越来越深,深刻理解“新添加的层如何提升神经网络的性能”变得至关重要。更重要的是设计网络的能力。在这种网络中,添加层会使得网…

单例模式:为何继承无法保证子类的单例特性

这里写目录标题 一、引言二、背景描述三、单例模式的规范边界全局访问点与静态工厂方法代码示例与注意事项 四、单例实现继承遇到的问题五、结论与替代方案结论替代方案特殊的想法🌸🌸源码阶段验证编译阶段验证运行阶段验证总结 一、引言 在软件设计中&a…

实时语音转文字(基于NAudio+Whisper+VOSP+Websocket)

今天花了大半天时间研究一个实时语音转文字的程序,目的还包括能够唤醒服务,并把命令提供给第三方。 由于这方面的材料已经很多,我就只把过程中遇到的和解决方案简单说下。源代码开源在AudioWhisper: 实时语音转文字(基于NAudioWhisperVOSPWe…

基于SSM的个性化商铺系统【附源码】

基于SSM的个性化商铺系统 效果如下: 用户登录界面 app首页界面 商品信息界面 店铺信息界面 用户功能界面 我的订单界面 后台登录界面 管理员功能界面 用户管理界面 商家管理界面 店铺信息管理界面 商家功能界面 个人中心界面 研究背景 研究背景 科学技术日新月异…

Leetcode 每日温度

class Solution {public int[] dailyTemperatures(int[] temperatures) {int n temperatures.length;Stack<Integer> stack new Stack<>();//默认将数组中的所有元素初始化为 0int[] results new int[n];for(int i 0; i < n; i) {while(!stack.isEmpty() &a…

leaflet前端JS实现高德地图POI兴趣点批量分类下载(附源码下载)

前言 leaflet 入门开发系列环境知识点了解&#xff1a; leaflet api文档介绍&#xff0c;详细介绍 leaflet 每个类的函数以及属性等等leaflet 在线例子leaflet 插件&#xff0c;leaflet 的插件库&#xff0c;非常有用 内容概览 leaflet前端JS实现高德地图POI兴趣点批量分类下载…

小猿口算炸鱼脚本

目录 写在前面&#xff1a; 一、关于小猿口算&#xff1a; 二、代码逻辑 1.数字识别 2.答题部分 三、代码分享&#xff1a; 补充&#xff1a;软件包下载 写在前面&#xff1a; 最近小猿口算已经被不少大学生攻占&#xff0c;小学生直呼有挂。原本是以为大学生都打着本…

【Python爬虫】看电影还在用VIP?一个python代码让你实现电影自由!附源码

今日主题 如何用Python解析vip电影。 什么是vip电影&#xff1f; 这些vip电影啊&#xff0c;想要观看的话&#xff0c;必须充值会员&#xff0c;否则没法看。 比如这个&#xff1a; 这些vip电影解析后呢&#xff1f; 不需要会员&#xff0c;不需要登录&#xff0c;可以直接…

Java-类与对象

一、面向对象 在了解类与对象前&#xff0c;我们需要先知道"面向对象"这个词的概念&#xff1a; 在Java语言中&#xff0c;我们的主要思想就是"面向对象"&#xff0c;而在之前我们所学习的C语言中大部分时候的思想是"面向过程"。 那么什么是&…

MySQL-10.DML-添加数据insert

一.DML(INSERT) -- DDL&#xff1a;数据操作语言 -- DML&#xff1a;插入数据 - insert -- 1.为tb_emp表的username&#xff0c;name&#xff0c;gender字段插入值 insert into tb_emp (username,name,gender) values (wuji,无忌,1); -- 这样会报错&#xff0c;因为create_ti…

DS堆的实际应用(10)

文章目录 前言一、堆排序建堆排序 二、TopK问题原理实战创建一个有一万个数的文件读取文件并将前k个数据创建小堆用剩余的N-K个元素依次与堆顶元素来比较将前k个数据打印出来并关闭文件 测试 三、堆的相关习题总结 前言 学完了堆这个数据结构的概念和特性后&#xff0c;我们来看…

限时设计ui

ctrl-------放大缩小 空格-----画面移动 alt------复制 页面<画板<图层 添加交互事件 原型 点击蓝色的圆&#xff0c;从1跳转到2 点击绿色的圆&#xff0c;从2跳转到1