• 掌握五个元组的用法,让python代码飞得更快


    说起Python的基本数据类型,第一时间想到肯定是int、str、list、dict...

    因为这几种数据类型被使用的频率相对比较高,所以对他们的印象会更深刻点。

    但是在Python的基本数据类型里有有一个神奇的类型,他的功能(方法)和列表重叠,而且列表的功能(方法)要比他多得多。

    一般人在使用Array的时候,基本上都会选择列表(List)而不会去选择他。

    「他就是今天的主角--元组(Tuple)」

    List VS Tuple

    共同点

    List和Tuple都是Python的内置类型,都可以保存数据集合,都可以保存复合数据,都可以用index方法对其进行索引。

    List

    为什么列表(List)会被经常使用?

    就是因为列表的对象方法多,能增、能减、能查、能数、能切、能排、甚至能用+号对其进行相加...

     

    使用dir(list)也可看到他自带的方法:

    ['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
    

    Tuple

    相比List,Tuple能使用的方法就少得可怜,只有区区四个。

    使用dir(tuple)查看元组类型的内置方法:

    ['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
    

    从上方dir(tuple)打印出的列表中我们发现,他内置函数只能实现查(index)和数(count)的功能。

    「既然列表包含所有的元组的功能,那元组还有什么必要存在?」

    元组之所以区别于列表的最大原因是:「列表是可变对象而元组是不可变对象。」

    简单来说,列表是可读可写的文档,那么元组就是一个只读的文档。

    代码示例:

    1. >>> lst = ['maishu','jason']
    2. >>> print(id(lst))
    3. 4498791232
    4. >>> lst[1] = "kevin"
    5. >>> print(id(lst))
    6. 4498791232

    对列表进行修改之后,他在内存中的地址并不会被改变。

    1. >>> tup = ("maishu","jason")
    2. >>> print(id(tup))
    3. 4498746176
    4. >>> tup[1] = "kevin"
    5. Traceback (most recent call last):
    6. File "", line 1, in <module>
    7. TypeError: 'tuple' object does not support item assignment

    报错了。

    那我直接把元组tup定义成("maishu","kevin")呢?

    1. >>> tup = ("maishu","kevin")
    2. >>> print(id(tup))
    3. 4498746240

    我们发现tup的id已经发生改变了,事实就是每一次创建元组对象,都会分配到新的内存地址。

    在相同元素组成下,列表会更占内存空间:

    1. >>> import sys
    2. >>> sys.getsizeof(lst)
    3. 72
    4. >>> sys.getsizeof(tup)
    5. 56

    Tuple的使用场景

    1. 如果写代码时,只需要一个Array当做常量的话,更推荐使用元组;
    2. 创建一个拥有相同元素的Array,元组会比列表快十几倍;
    3. 如果你需要一个Array不被任何人修改,那么也推荐使用元组;
    4. 不可变类型--元组可以当做字典的键,可变类型--列表不可以;
    1. >>> a1 = ["a"]
    2. >>> a2 = ("a",)
    3. >>> {a1:"value"}
    4. Traceback (most recent call last):
    5. File "", line 1, in <module>
    6. TypeError: unhashable type: 'list'
    7. >>> {a2:"value"}
    8. {('a',): 'value'}
    9. >>>

    【python学习】
    学Python的伙伴,欢迎加入新的交流【君羊】:757753272
    一起探讨编程知识,成为大神,群里还有软件安装包,实战案例、学习资料

  • 相关阅读:
    LVS集群
    Netty02——Netty 入门
    Wirshark学习笔记
    Text-based diagram tool
    博客整理 vim编译器
    代码随想录算法训练营Day46 | 动态规划(8/17) 1.练习题 LeetCode 139.单词拆分 2.多重背包 3. 背包问题总结篇!
    轴承寿命预测的基础-对Palmgren理论的再讨论
    PEG-siRNA-PCL|siRNA-PEG-LHRH|MPEG-siRNA 甲氧基聚乙二醇修饰核酸
    【电路笔记】-晶体管作为开关
    剑指 Offer 25. 合并两个排序的链表
  • 原文地址:https://blog.csdn.net/SixStar_FL/article/details/126745480