命名元组(python)

03-10 1449阅读

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


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


【学习的细节是欢悦的历程】
  • Python 官网: python 前沿。可惜是英文原版。所以,我要练习英文阅读。🧐🧐">https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……

    地址:https://lqpybook.readthedocs.io/


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

                —— 华罗庚


    • My CSDN主页、My HOT博、My Python 学习个人备忘录
    • 好文力荐、 老齐教室 命名元组(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、创建命名元组
            • 4.2 由已有字典 d i c t dict dict数据创建
            • 4.3 由已有普通元组数据创建
            • 5、元组真的不可改变?

              ◆ 命名元组

              命名元组(python)

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

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

                1 1 1、数据的属性确定且固定

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

                2 2 2、代码可读性和可维护性要求高

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

                3 3 3、数据需要进行解构操作

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

                4 4 4、性能优化考虑

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



                回页首

                命名元组(python)

                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模块。命名元组是一种工厂函数,用来创建一个带字段名的元组子类。简单来说,命名元组就是具有名称的元组,每个元素都可以通过一个唯一的名字来访问,而不只是通过位置索引。

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

                        ### 4.1 直接创建

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

                        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)  # 输出 11
                          print(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 namedtuple
                        Author = 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]}")
                        
                        • 上面这段代码运行效果截屏图片

                          命名元组(python)


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

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

                            命名元组(python)

                            4.2 由已有字典 d i c t dict dict数据创建

                              命名元组的创建,除了直接创建,还可以用已有字典 d i c t dict dict数据创建。

                            python代码

                            #!/sur/bin/nve python
                            # coding: utf-8
                            from collections import namedtuple
                            person_dict = {'name': '张三', 'age': 30, 'city': '北京'} # 已有有字典。
                            Person = namedtuple('Person', person_dict.keys()) # 创建一个命名元组类型,使用字典的键作为字段名。
                            person = Person(**person_dict) # # 使用字典的值来创建一个命名元组实例。
                            # 现在可以像这样访问命名元组中的字段
                            print(person.name)  # 输出: 张三
                            print(person.age)   # 输出: 30
                            print(person.city)  # 输出: 北京
                            

                            4.3 由已有普通元组数据创建

                              命名元组的创建,还可以由已有普通元组创建。只是要提供字段序列生成命名元组实例,即准备好命名元组的“名”,再用 . n a m e d t u p l e .namedtuple .namedtuple方法完成命名元组的创建。见如下代码示例:

                            python代码

                            #!/sur/bin/nve python
                            # coding: utf-8
                            from collections import namedtuple
                            # 假设我们有一个普通元组
                            person_tuple = ('张三', 30, '北京')
                            # 定义一个字段名列表
                            fields = ['name', 'age', 'city']
                            # 创建一个命名元组类型
                            Person = namedtuple('Person', fields)
                            # 将普通元组转换为命名元组
                            person = Person(*person_tuple)
                            # 现在可以像这样访问命名元组中的字段
                            print(person.name)  # 输出: 张三
                            print(person.age)   # 输出: 30
                            print(person.city)  # 输出: 北京
                            



                            回页目录

                            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-8
                            t = [], []
                            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 = }")
                            
                            • 上段代码输出截屏图片

                              命名元组(python)

                                如果截图和代码可见,可以对元组 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 (更多热博,请点击蓝色文字跳转翻阅)
                              • 截屏图片

                                命名元组(python)

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



                                回页首

                                命名元组(python)

                                精品文章:

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

                                  来源:老齐教室


                                  ◆ Python 入门指南【Python 3.6.3】


                                  好文力荐:

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

                                    CSDN实用技巧博文:

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

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]