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

【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.mzph.cn/diannao/56228.shtml

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

相关文章

如何实现简单的 WinCC 项目分屏?

说明: 本文主要介绍了在不使用分屏器的情况下,通过 WinCC 项目中的设置,实现简单的分屏操作。两台显示器分别显示不同的 WinCC 画面,独自操作,互不影响。 试验环境 : 本文试验时所用硬件及软件环境…

Ubuntu如何显示pcl版本

终端输入: apt-cache show libpcl-dev可以看到,Ubuntu20.04,下载的pcl,应该都是1.10版本的

机器学习可解释性

机器学习的稳健性、可解释性和结果正确性等是人工智能安全可信应用必须解决的关键问题。 传统机器学习: 内置可解释性:决策树IF-Then规则,直观可理解事后可解释性:训练结束后的可解释技术特定于模型体系结构的解释与解释方法及模…

VS Code设置右侧滚动条高亮选中的字符位置

打开菜单“文件 -> 首选项 -> 设置”, 搜索“hightlight”,扩展中的Highlight Selections,再点击“在 settings.json中编辑”, 将editor.selectionHighlight选项改为true保存即可

【读书笔记·VLSI电路设计方法解密】问题12:制造MOSFET晶体管的主要工艺步骤是什么

VLSI芯片是在半导体材料上制造的,这种材料的导电性介于绝缘体和导体之间。通过一种称为掺杂的工艺引入杂质,可以改变半导体的电气特性。能够在半导体材料的细小且定义明确的区域内控制导电性,促使了半导体器件的发展。结合更简单的无源元件(电阻、电容和电感),这些器件被…

股市入门常见术语介绍

鉴于最近行情讨论火热,我也想借此平台,结合我大学时期身边同学老师的投资经历,写一篇交易入门术语简介。内容不多但是足以达到科普之用。 ​ 希望大家能谨慎对待投资,始终保持谦虚学习的态度。不要迷失在瞬息万变的金融市场&…

Redis拒绝连接问题分析与解决方案

目录 前言1. 问题描述2. Redis拒绝连接的常见原因分析2.1 Redis服务未启动2.2 Redis配置中的绑定地址问题2.3 防火墙或安全组问题2.4 Redis连接池耗尽2.5 Redis服务器负载过高2.6 权限配置问题 3. 深度解决方案和优化建议4. 总结 前言 在分布式系统中,Redis作为高性…

游戏服务端架构演进

文章目录 前言初出茅庐粗通皮毛略有小成炉火纯青内劲深厚最后 前言 对于网络游戏,一般分为客户端和服务端,客户端主要负责界面图像的渲染与一些交互操作,服务端主要负责数据的业务处理与存储还有与客户端之间的信息交互 比如玩家聊天、广播…

黑马程序员-redis项目实践笔记1

目录 一、 基于Session实现登录 发送验证码 验证用户输入验证码 校验登录状态 Redis代替Session登录 发送验证码修改 验证用户输入验证码 登录拦截器的优化 二、 商铺查询缓存 缓存更新策略 数据库和缓存不一致解决方案 缓存更新策略的最佳实践方案 实现商铺缓…

TS中如何正确处理window类型

在Typescript项目中,你可能都遇到过这个错误: Window & typeof globalThis 类型上不存在属性 X。 快速修复方案 我们将介绍几种不同的解决方案来解决这个问题。 Window 接口是在名为 lib.dom.d.ts 的文件中全局定义的。你可以使用各种技术来更改它&a…

Windows 11 24H2版本有哪些新功能_Windows 11 24H2十四大新功能介绍

距离上次发布的23H2版本已经过去了一年时间,现在,Win 11的24H2版本终于等到了,微软已经全面公开发布Win11 24H2版本,版本号为26100.1742,此次官宣的版本包括了消费者版、商业版、LTSC 2024版等,各种语言版本…

如何启动hive

检查mysql是否启动 通过Navicat测试mysql是否可以连接 找打hive配置文件所在目录 检查连接mysql的账号密码是否正确,如果不正确就要修改为正确的 初始化hive元数据存储的库:schematool -dbType <database_type> -initSchema 检查mysql中是否创建hive数据库,这里看到hive数…

zookeeper客户端

启动单机版的zookeeper 配置Maven环境 (1) IDEA自带maven (2) 更新Maven库镜像地址&#xff1a; ① 拷贝D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.5\plugins\maven\lib\maven3\conf\settings.xml [IntelliJ的安装目录]到 C:/用户/username/.m2 (如果.m2文件不存在&…

华宇携司法大模型亮相2024中国移动全球合作伙伴大会

2024中国移动全球合作伙伴大会于10月11日在广州琶洲保利世贸博览馆盛大开幕。本届大会以“智焕新生 共创AI时代”为主题&#xff0c;深入探讨数据、算力与人工智能如何深度融合&#xff0c;全力推进AI规模发展、规模应用&#xff0c;加快形成AI技术能力、经济效益上的规模效应&…

第十三章 RabbitMQ之消息幂等性

目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念&#xff0c;用函数表达式来描述是这样的&#xff1a;f(x) f(f(x)) 。在程序开发中&#xff0c;则是指同一个业务&#xff0c;执行一次或多次对业务状态的影响是一致的。有些业务…

react实现实时计时的最简方式

js中时间的处理&#xff0c;不借助于moment/dayjs这样的工具库&#xff0c;原生获取格式化的时间&#xff0c;最简单的实现方式可以参考下面这样。 实现效果 代码实现 封装hooks import { useState, useEffect } from "react";export function useCountTime() {c…

Python酷库之旅-第三方库Pandas(150)

目录 一、用法精讲 681、pandas.Timestamp.now方法 681-1、语法 681-2、参数 681-3、功能 681-4、返回值 681-5、说明 681-6、用法 681-6-1、数据准备 681-6-2、代码示例 681-6-3、结果输出 682、pandas.Timestamp.replace方法 682-1、语法 682-2、参数 682-3、…

VUE 开发——Vue学习(三)—— 智慧商城项目

目录 解释各个模块 api接口模块&#xff1a;发送ajax请求的接口模块utils工具模块&#xff1a;自己封装的一些工具方法模块components组件模块&#xff1a;全局通用的组件router路由模块&#xff1a;封装要所有路由views&#xff1a;各个页面assets&#xff1a;各种资源 van…

源码编译llama.cpp for windows on arm

源码编译llama.cpp for windows on arm 这里有编译好的&#xff0c;直接下载使用 https://github.com/turingevo/llama.cpp-build/releases 1 先编译openblas for windows on arm 查看我的文章 《源码编译 openblas for windows on arm》 2 启用OpenBlas加速 上一步openb…

Java+Jenkins实现自动化打包部署流程

目录 jenkins简介 前置依赖 1. jdk17 2.apache maven 3.8.6 3.git 4.docker 5.下载jenkins 启动配置jenkins 优缺点对比 Jenkins 的优点&#xff1a; Jenkins 的缺点&#xff1a; jenkins简介 Jenkins 是一个开源的自动化服务器&#xff0c;可以用于自动化各种任务&…