我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

结合最近的博客内容,来学习一下python中的元组tuple类型。typle类型和list类型非常类似,但是元组一旦被定义,就不可以被修改,不可以被排序。当然,如果非要修改的话,转化为list,再转为tuple吧。

苏南大叔:python代码,如何理解tuple元组?tuple/list/set异同对比 - python元组数据
python代码,如何理解tuple元组?tuple/list/set异同对比(图2-1)

大家好,这里是苏南大叔的程序如此灵动博客,这里介绍苏南大叔和计算机代码的故事。本文主要介绍pthon里面元组的主要使用方式。测试环境:win10python@3.6.8

基础定义

  • tuple元组和list/set非常类似,可以相互转化。
  • tuple元组中就一个元素的时候,需要在后面添加逗号,否则会认为普通的括号运算符。
  • tuple元组中可以包含list或者set。虽然tuple不可修改,但是list可以修改。
a1 = (1)
a2 = [1]
a3 = {1}  #---
a4 = (1,)
a5 = [1, ]
a6 = {1, }  #---
a7 = (1, 2)
a8 = [3, 4]
a9 = {1, 2}   #---
a10 = (1, 2, [3, 4, 5], {1, 2, 3})
a11 = tuple([5, 6])
a12 = tuple({7, 8})

print(type(a1), type(a2), type(a3))
print(type(a4), type(a5), type(a6))
print(type(a7), type(a8), type(a9))
print(type(a10), type(a11), type(a12))
print(type(a10[1]), type(a10[2]), type(a10[3]))

苏南大叔:python代码,如何理解tuple元组?tuple/list/set异同对比 - 基本定义
python代码,如何理解tuple元组?tuple/list/set异同对比(图2-2)

单元素对比

对于单元素的情况,tuple是很奇怪的,必须添加一个额外的逗号。所以,

  • tuple对比,(1)不等于(1,)
  • list 对比,[1]等于[1,]
  • set 对比,{1}等于{1,}
  • tuple对比,(1,2)等于(1,2,)
print((1)==(1,))         # False
print([1]==[1,])         # True
print({1}=={1,})         # True
print((1,2)==(1,2,))     # True

可简化的定义

测试代码:

a1 = 1
a2 = 1,
a3 = 1,"a","b"
print(type(a1))
print(type(a2))
print(type(a3))

输出:

<class 'int'>
<class 'tuple'>
<class 'tuple'>

对于上面的a2a3定义,只写了逗号,没有写元组标志性的(),依然被识别为元组tuple类型。

可以执行的操作

根据前面的两篇文章,苏南大叔可以知道:
可以使用dir()函数列出变量所有可用的操作,还可以使用差集操作得到特有的函数方法。

那么,就看看tuple类型和list类型、set类型的可操作类型差别把。

set_tuple = set(dir((1, )))  # 获得tuple类型的可操作方法集合
set_list = set(dir([1, ]))   # 获得list类型的可操作方法集合
set_set = set(dir({1, }))    # 获得set类型的可操作方法集合
# print(set_tuple)

# 对比一下可操作方法的差集
print(set_tuple - set_list)
print(set_list - set_tuple)

print(set_tuple - set_set)
print(set_set - set_tuple)

结论1:tuple不能修改,不能排序。

  • tuplelist,特有的操作是:{'__getnewargs__'}
  • listtuple,特有的操作是:{'insert', 'copy', 'append', 'remove', 'extend', 'pop', '__iadd__', 'sort', '__setitem__', 'clear', 'reverse', '__imul__', '__delitem__', '__reversed__'}

结论2:tuple不能做集合运算。

  • tupleset,特有的操作是:{'__add__', 'count', '__getitem__', '__mul__', '__rmul__', '__getnewargs__', 'index'}
  • settuple,特有的操作是:{'update', 'copy', '__ior__', 'difference', '__or__', 'intersection', '__isub__', 'intersection_update', 'discard', '__rsub__', 'issuperset', '__and__', '__sub__', '__xor__', 'union', 'isdisjoint', '__iand__', 'difference_update', 'add', '__ror__', 'remove', '__rand__', '__ixor__', '__rxor__', 'pop', 'symmetric_difference', 'issubset', 'symmetric_difference_update', 'clear'}

但是,这个结论也就是个表象的结论。因为tuplesetlist之间可以相互转化,如果不能修改不能排序,或者是不能做集合计算的话。这并不是特别大的问题,做个类型转化即可。您说是不是?

类型名称定义可重复性有序性只读性添加新元素
set可变集合{1}天然去重无序可修改add()
list列表/数组[1]可重复有序可修改append()
tuple元组(1,)可重复有序只读---

相关链接

结论

在介绍python中的函数定义方式的时候,曾经提到过*args,**kwargs的概念,其中的*args就是个tuple,而**kwargs是个list。更多python结论文章,请点击下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python