命名元组(python)

命名元组与元组的差异,命名元组和字典,哪个效率更高。


(笔记模板由python脚本于2024年02月26日 12:31:36创建,本篇笔记适合熟悉python元组和字典的coder翻阅)


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


命名元组与元组的差异
命 名 元 组
(命名元组和字典,哪个效率更高)


本文质量分:

97 97 97

本文地址: https://blog.csdn.net/m0_57158496/article/details/136296389

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆ 命名元组
    • 1、何时适宜使用命名元组?
    • 2、元组和命名元组的异同?
    • 3、命名元组比字典效率更高
      • 3.1 命名元组相对于字典的优势
      • 3.2 字典相对于命名元组的优势
    • 4、创建命名元组
    • 5、元组真的不可改变?


◆ 命名元组


在这里插入图片描述

1、何时适宜使用命名元组?


  • 命名元组在以下情况下特别有用:

    1 1 1数据的属性确定且固定
      当数据元素的属性在创建后就不会改变时,命名元组是一个比较合适的选择。相比之下,字典的键是可以改变的,因此不适合用于表示具有固定属性的数据。

    2 2 2代码可读性和可维护性要求高
      命名元组具有明确的字段名,这使得代码更容易阅读和理解。与之相反,字典的键值对缺乏固定的结构,容易导致代码混乱和难以维护。

    3 3 3数据需要进行解构操作
      命名元组可以像普通元组一样进行解构操作, 即将一个命名元组的字段分别赋值给变量。这在处理具有固定字段的数据时非常方便。而字典在解构时需要额外的操作。

    4 4 4性能优化考虑
      由于命名元组是不可变的,它的访问速度比字典更快。这对于数据量较大或需要频繁访问的场景非常有利。



回页首


在这里插入图片描述

2、元组和命名元组的异同?


  元组( T u p l e Tuple Tuple)和命名元组( N a m e d T u p l e NamedTuple NamedTuple)都是 P y t h o n Python Python中常用的数据结构,它们有以下几个异同点:


  • 相同点

    1、不可变性:一旦创建,它们的元素不能被修改。

    2、有序性:元素按照创建时的顺序存储,可以通过索引访问。

    3、可迭代性:都可以使用for循环进行遍历。

  • 不同点

    1、访问方式:普通元组通过索引访问,例如 t[0] ;命名元组可以通过字段名访问,例如 t.name

    2、可读性:命名元组由于其元素有名字,所以代码的可读性更好。

    3、创建方式:普通元组直接使用小括号,例如 t = (1, 2, 3) ( t = 1, 2, 3
    ,这样直接给一个变量赋值一个序列,创建的也是普通元组)
    ;命名元组需要使用 collections.namedtuple() 函数来创建,例如 Point = namedtuple(‘Point’, [‘x’, ‘y’])

    4、性能:普通元组在性能上略优于命名元组,因为命名元组需要额外的字典来存储字段名。

    5、功能:命名元组提供了 ._make()._asdict() 等方法,可以将序列或字典转换成命名元组,以及将命名元组转换成字典。

  总之,如果需要一个简单的、不可变的序列,可以使用普通元组;如果需要一个具有更好可读性和功能的序列,可以使用命名元组。



回页目录


3、命名元组比字典效率更高


  命名元组( N a m e d T u p l e NamedTuple NamedTuple)和字典(Dictionary) P y t h o n Python Python中两种不同的数据结构,它们在性能和用途上有所区别。一般来说,命名元组在某些操作上可能比字典更高效,但这取决于具体的使用场景和操作。


3.1 命名元组相对于字典的优势


  • ==================================

    1 1 1. 访问速度:命名元组的元素访问速度通常比字典快,因为字典需要通过哈希表来查找键,而命名元组可以直接通过索引和字段名访问。

    2 2 2. 内存占用:命名元组通常比字典占用更少的内存,因为它们不需要为每个字段存储一个哈希表项。

    3 3 3. 不可变性:命名元组是不可变的,这意味着一旦创建,它们的值就不能改变。这种不可变性可以提供额外的安全性,并有助于防止错误。

3.2 字典相对于命名元组的优势


  • ==================================

    1 1 1. 灵活性:字典可以动态地添加、删除和修改键值对,而命名元组的字段在创建时就已经确定,不能动态修改。

    2 2 2. 键的类型:字典的键可以是任何不可变类型,如字符串、数字或元组,而命名元组的字段名必须是有效的Python标识符。
    总的来说,如果需要一个轻量级、快速的固定字段集合,并且不需要动态修改字段,命名元组是一个很好的选择。如果需要更灵活的键值对存储,能够动态修改,那么字典可能更合适。

  在实际应用中,选择哪种数据结构应该基于具体的需求和性能考量。对于大多数应用来说,这种选择可能不会对性能产生显著影响,因此代码的可读性和维护性可能是更重要的考虑因素。



回页目录


4、创建命名元组


  命名元组( N a m e d T u p l e NamedTuple NamedTuple) P y t h o n Python Python中一个非常有用的内置数据类型,它属于 c o l l e c t i o n s collections collections模块。命名元组是一种工厂函数,用来创建一个带字段名的元组子类。简单来说,命名元组就是具有名称的元组,每个元素都可以通过一个唯一的名字来访问,而不只是通过位置索引。

  使用命名元组的好处是代码可读性和可维护性更强,因为字段名提供了自解释性,使得代码更加直观。


下面是命名元组的一些基本操作

1、导入 c o l l e c t i o n s collections collections模块

from collections import namedtuple

2、定义一个命名元组类型

Point = namedtuple('Point', ['x', 'y'])

  这里Point是新创建的命名元组类型名,'Point'是这个类型的名字,['x', 'y']是字段名列表。

4、创建命名元组实例

p = Point(11, y=22)  # 位置参数和关键字参数都可以用来初始化

5、访问字段值

print(p.x)  # 输出 11print(p.y)  # 输出 22

6、作为字典使用

  命名元组可以像字典一样使用,但它们是不可变的。

print(p._asdict())  # 将命名元组转换为字典

7、字段遍历

for coordinate in p:print(coordinate)

8、索引和切片

  由于命名元组是元组的子类,所以你可以像使用普通元组一样使用索引和切片。

print(p[0])  # 输出 11

9、替换字段值

  可以使用_replace()方法来创建一个新的命名元组,其中某些字段被替换了。

p2 = p._replace(x=33)

  命名元组非常适合用于那些需要简单、不可变且具有明确字段名的数据结构。在处理数据库记录、配置文件设置或函数的多个返回值时,它们是非常有用的。


又如:

#!/sur/bin/nve python
# coding: utf-8
import collections
from collections import namedtupleAuthor = namedtuple('Author', ('name', 'sex')) # 创建一个Author类。
t = Author('梦幻精灵_cq', '男') # 实例一个Author类。
print(f"\n命名元组类{Author = }的实例命名元组{t = }的对象类型是:{type(t)}。")
print(f"\n\n命名元组元素引用:\n\n1. 按命名元组字段:{t.name = }{t.sex = }\n\n2. 按普通元组索引下标:姓名:{t[0]},性别:{t[1]}")
  • 上面这段代码运行效果截屏图片
    在这里插入图片描述

用._replace方法将name字段替换成英文


t._replace(name='DreamElf_cq') # 替换实例中的name成英文。
print(f"\n\n把实例t中的name字段替换成中文:{t.name = }")
  • 代码运行效果截屏图片
    在这里插入图片描述



回页目录


5、元组真的不可改变?


  是的,元组在 P y t h o n Python Python中是不可变的。这意味着一旦创建了元组,就不能对其进行修改,例如不能更改元组中的元素,不能添加或删除元素。任何尝试修改元组内容的操作都会导致 T y p e E r r o r TypeError TypeError

例如:

my_tuple = (1, 2, 3)
my_tuple[0] = 4  # 这会引发TypeError

  然而,有一些情况可能会让人误以为元组是可变的。例如,如果一个元组包含可变对象(如列表),则可以修改这些可变对象的内容,但这并不违反元组本身的不可变性。元组中的元素引用是不可变的,但被引用的对象本身可以是可变的。

例如:

my_tuple = (1, [2, 3], 4)
my_tuple[1][0] = 5  # 这是允许的,因为修改的是列表元素,而不是元组本身

  在这个例子中, my_tuple 包含一个列表 [2, 3] 作为第二个元素。虽然不能更改 my_tuple 中的列表对象本身,但是可以更改该列表的内容。这并不违反元组的不可变性,因为元组中的元素引用没有改变


再比如:

#!/sur/bin/nve python
# coding: utf-8t = [], []
print(f"\n{t = }\n\n变量t指向的对象是{t},其对象类型是{type(t)},其两个元素都是空列表。")t[0].append(4)
t[-1].extend(list('abc'))
print(f"\n\n我们不可以修改元组t,但是可以改变其可变对象的元素对象(本例中的可变对象是是list,对其中一个列表追加了单个元素,对另一个列表追加了一个列表):\n{t = }")t[0][-1] = 666
t[1][1] = 'OK'
t[1][-1] = '梦幻精灵_cq'
t[0][0] = 888
t[0].insert(0, 'DreamElf_cq')
print(f"\n\n我们接着对元组t的两个列表对象进行了更多操作:\n{t = }")
  • 上段代码输出截屏图片
    在这里插入图片描述
      如果截图和代码可见,可以对元组 t t t l i s t list list对象进行列表的所有操作,看起来是元组 t t t改变了。其实,我们改变的仅仅是元组 t t t的列表元素,元组本身仍然是不可变的。如果对t[0]t[1]进行赋值操作,必然引发异常。



回页首


上一篇:  match-case与if/elif/else(python)(if/elif/else语句应对一般场景,match-case主打复杂条件分支语句)
下一篇: 



我的HOT博:

  本次共计收集289篇博文笔记信息,总阅读量44.72w。数据采集于2023年12月11日 23:07:13,用时5分11.8秒。阅读量不小于4.0k的有17篇。

  1. ChatGPT国内镜像站初体验:聊天、Python代码生成等
    地址:https://blog.csdn.net/m0_57158496/article/details/129035387
    浏览阅读:6.2w
    点赞:127 收藏:809 评论:71
    (本篇笔记于2023-02-14 23:46:33首次发布,最后修改于2023-07-03 05:50:55)

  2. 让QQ群昵称色变的神奇代码
    地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    浏览阅读:5.8w
    点赞:24 收藏:86 评论:17
    (本篇笔记于2022-01-18 19:15:08首次发布,最后修改于2022-01-20 07:56:47)

  3. Python列表(list)反序(降序)的7种实现方式
    地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    浏览阅读:9.9k
    点赞:5 收藏:30 评论:8
    (本篇笔记于2022-12-11 23:54:15首次发布,最后修改于2023-03-20 18:13:55)

  4. pandas 数据类型之 DataFrame
    地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    浏览阅读:9.4k
    点赞:7 收藏:34 
    摘要:pandas 数据类型之 DataFrame_panda dataframe。
    (本篇笔记于2022-05-01 13:20:17首次发布,最后修改于2022-05-08 08:46:13)

  5. 个人信息提取(字符串)
    地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    浏览阅读:7.7k
    摘要:个人信息提取(字符串)_python个人信息提取。
    (本篇笔记于2022-04-18 11:07:12首次发布,最后修改于2022-04-20 13:17:54)

  6. Python字符串居中显示
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    浏览阅读:7.2k
    评论:1
  7. 罗马数字转换器|罗马数字生成器
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    浏览阅读:7.2k
    (本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)

  8. 斐波那契数列的递归实现和for实现
    地址:https://blog.csdn.net/m0_57158496/article/details/122355295
    浏览阅读:5.6k
    点赞:4 收藏:2 评论:8
  9. 回车符、换行符和回车换行符
    地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    浏览阅读:5.5k
    点赞:2 收藏:3 
    摘要:回车符、换行符和回车换行符_命令行回车符。
    (本篇笔记于2022-02-24 13:10:02首次发布,最后修改于2022-02-25 20:07:40)

  10. python清屏
    地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    浏览阅读:5.3k
  11. 练习:字符串统计(坑:f‘string‘报错)
    地址:https://blog.csdn.net/m0_57158496/article/details/121723096
    浏览阅读:5.1k
  12. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
    地址:https://blog.csdn.net/m0_57158496/article/details/121645399
    浏览阅读:5.1k
    点赞:14 收藏:44 
  13. 我的 Python.color() (Python 色彩打印控制)
    地址:https://blog.csdn.net/m0_57158496/article/details/123194259
    浏览阅读:4.6k
    点赞:2 收藏:8 
    摘要:我的 Python.color() (Python 色彩打印控制)_python color。
    (本篇笔记于2022-02-28 22:46:21首次发布,最后修改于2022-03-03 10:30:03)

  14. 练习:生成100个随机正整数
    地址:https://blog.csdn.net/m0_57158496/article/details/122558220
    浏览阅读:4.6k
    (本篇笔记于2022-01-18 13:31:36首次发布,最后修改于2022-01-20 07:58:12)

  15. 密码强度检测器
    地址:https://blog.csdn.net/m0_57158496/article/details/121739694
    浏览阅读:4.4k
    (本篇笔记于2021-12-06 09:08:25首次发布,最后修改于2022-11-27 09:39:39)

  16. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    地址:https://blog.csdn.net/m0_57158496/article/details/122608526
    浏览阅读:4.2k
    (本篇笔记于2022-01-20 19:38:12首次发布,最后修改于2022-01-21 18:32:02)

  17. 练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
    地址:https://blog.csdn.net/m0_57158496/article/details/124424935
    浏览阅读:4.0k
    摘要:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)_生日模拟问题,计算频率,并画出随着试验次数n的增大,频率和理论概率的 关系图。
    (本篇笔记于2022-04-26 12:46:25首次发布,最后修改于2022-04-27 21:22:07)

推荐条件 阅读量突破4.0k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    在这里插入图片描述
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)



回页首


老齐漫画头像

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


◆ Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
  • 靠谱程序员的好习惯
  • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)

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

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

相关文章

面试redis篇-13Redis为什么那么快

Redis是纯内存操作,执行速度非常快采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题使用I/O多路复用模型,非阻塞IOI/O多路复用模型 Redis是纯内存操作,执行速度非常快,它的性能瓶颈是网络延迟而不是执行速度, I/O多路复用模型主要就是实现了高效…

Lua速成(2)

一、流程控制 Lua 编程语言流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。 控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,true和非nil为真。 …

C++ list详解以及模拟实现

目录 1.list的使用 1.1list的定义 1.2list的使用 1.3list iterator使用 1.4list capacity 1.5list element access 1.6list增删查改 2.list迭代器失效问题 3.list的模拟实现 1.list的使用 1.1list的定义 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容…

探索便捷办公新选择:ONLYOFFICE 桌面编辑器

目录 引言 1. ONLYOFFICE 桌面编辑器简介 2. 功能特点 2.1 多格式支持 2.2 实时协作编辑 2.3 兼容性与格式保持 2.4 丰富的编辑功能 3. 使用方法 3.1 下载安装 3.2 打开文档 3.3 编辑文档 3.4 保存和共享 4. 注意事项 4.1 版本更新 4.2 网络连接 4.3 安全性 5.…

matlab 方向向量约束的PCA快速粗配准

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 该方法由本人原创,目前尚未见有相关论文用到。具体原理看代码即可。 二、代码实现 clc;clear; %% ------…

rtthread stm32h743的使用(一)新工程建立

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验,核心板如图: 1.打开rtthread studio填写芯片型号及调试口,我们的调试串口为USART1_PA9,PA10。 2.编译新工程并且下载 …

C++:类与对象(2)

创作不易,感谢三连! 一、六大默认成员函数 C为了弥补C语言的不足,设置了6个默认成员函数 二、构造函数 2.1 概念 在我们学习数据结构的时候,我们总是要在使用一个对象前进行初始化,这似乎已经成为了一件无法改变的…

ConvNeXt V2:用MAE训练CNN

论文名称:ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders 发表时间:CVPR2023 code链接:代码 作者及组织: Sanghyun Woo,Shoubhik Debnath来自KAIST和Meta AI。 前言 ConvNextV2是借助MAE的思想来训练…

JSP实现数据传递与保存(一)

一、Web开发步骤 1.1两类模式 后端——————前端 先有前端&#xff0c;前端用的时候直接调用 后端已实现注册接口&#xff0c;接口名为doRegister.jsp 前端此时&#xff1a; 前端的form表单中的action提交地址就只能填doRegister.jsp&#xff0c;即&#xff1a; <f…

C++面试宝典第32题:零钱兑换

题目 给定不同面额的硬币coins和一个总金额amount,编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,则返回-1。说明:你可以认为每种硬币的数量是无限的。 示例1: 输入:coins = [1, 2, 5], amount = 11 输出:3 解释:11 = …

如何学习Arduino单片机

&#xff08;本文为简单介绍&#xff0c;内容源于网络&#xff09; 学习Arduino相关的网址和开源社区&#xff1a; Arduino官方文档: Arduino - HomeArduino Forum: Arduino ForumArduino Playground: Arduino Playground - HomePageGitHub: GitHub: Let’s build from here …

【Linux C | 网络编程】套接字选项、getsockopt、setsockopt详解及C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

浅谈门级驱动电压对IGBT性能的影响

绝缘门极双极型晶体管&#xff08;IGBT&#xff09;是复合了功率场效应管和电力晶体管的优点而产生的一种新型复合器件&#xff0c;具有输入阻抗高、工作速度快、热稳定性好、驱动电路简单、饱和压降低、耐压高电流大等优点&#xff0c;因此现今应用相当广泛。但是IGBT良好特性…

Programming Abstractions in C阅读笔记:p303-p305

《Programming Abstractions in C》学习第74天&#xff0c;p303-p305总结&#xff0c;总计3页。 一、技术总结 1.时间复杂度分类(complexity classes) ClassNotationExampleconstantO(1)Returning the first element in an arraylogarithmicO(logN)Binary search in a sorte…

使用Node.js开发一个文件上传功能

在现代 Web 应用程序开发中&#xff0c;文件上传是一个非常常见且重要的功能。今天我们将通过 Node.js 来开发一个简单而强大的文件上传功能。使用 Node.js 来处理文件上传可以带来许多好处&#xff0c;包括简单的代码实现、高效的性能和灵活的配置选项。 首先&#xff0c;我们…

【软件测试】--功能测试3

一、用例执行 说明&#xff1a;执行结果与用例的期望结果不一致&#xff08;含义&#xff09;&#xff0c;为缺陷。 执行失败的用例 提示&#xff1a;用例执行不通过为缺陷&#xff0c;需要进行缺陷管理 二、缺陷 2.1 定义 软件中存在的各种问题&#xff0c;都为缺陷&#…

第 1 章 微信小程序与云开发从入门到实践从零开始做小程序——开发认识微信小程序

小北的参考工具书 小程序开发的图书并不少&#xff0c;这本书仍然值得你拥有&#xff01; 首先&#xff0c;这是一本全栈小程序开发教程&#xff0c;循序渐进&#xff0c;由浅入深&#xff0c;介绍了小程序开发你想了解的方方面面&#xff0c;包括近其小程序开发的各种新技术应…

【HarmonyOS】鸿蒙开发之Stage模型-应用配置文件——第4.2章

Stage模型-应用配置文件 AppScope -> app.json5&#xff1a;应用的全局配置信息entry&#xff1a;OpenHarmony工程模块&#xff0c;编译构建生成一个HAP包 build&#xff1a;用于存放OpenHarmony编译生成的hap包src -> main -> ets&#xff1a;用于存放ArkTS源码src …

docker 常用指令(启动,关闭,查看运行状态)

文章目录 docker 常用指令启动 docker关闭 docker查看 docker的运行状态 docker 常用指令 启动 docker systemctl start docker关闭 docker systemctl stop docker查看 docker的运行状态 systemctl status docker如下图所示&#xff1a; 表示docker正在运行中

Stable Diffusion 绘画入门教程(webui)-ControlNet(NormalMap)

法线贴图NormalMap可以把参考图的光影分布关系,法线贴图可以实现在不改变物体真实结构的基础上也能反映光影分布的效果&#xff0c;被广泛应用在 CG 动画渲染和游戏制作等领域 简单来讲可以参考原图的光影明暗关系并还原原图姿态&#xff0c;如下图&#xff1a;左边为原图&…