python代码,如何理解tuple元组?tuple/list/set异同对比
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
结合最近的博客内容,来学习一下python
中的元组tuple
类型。typle
类型和list
类型非常类似,但是元组一旦被定义,就不可以被修改,不可以被排序。当然,如果非要修改的话,转化为list
,再转为tuple
吧。
大家好,这里是苏南大叔的程序如此灵动博客,这里介绍苏南大叔和计算机代码的故事。本文主要介绍pthon
里面元组的主要使用方式。测试环境:win10
,python@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]))
单元素对比
对于单元素的情况,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'>
对于上面的a2
和a3
定义,只写了逗号,没有写元组标志性的()
,依然被识别为元组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
不能修改,不能排序。
tuple
比list
,特有的操作是:{'__getnewargs__'}
。list
比tuple
,特有的操作是:{'insert', 'copy', 'append', 'remove', 'extend', 'pop', '__iadd__', 'sort', '__setitem__', 'clear', 'reverse', '__imul__', '__delitem__', '__reversed__'}
。
结论2:tuple
不能做集合运算。
tuple
比set
,特有的操作是:{'__add__', 'count', '__getitem__', '__mul__', '__rmul__', '__getnewargs__', 'index'}
。set
比tuple
,特有的操作是:{'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'}
。
但是,这个结论也就是个表象的结论。因为tuple
和set
、list
之间可以相互转化,如果不能修改不能排序,或者是不能做集合计算的话。这并不是特别大的问题,做个类型转化即可。您说是不是?
类型 | 名称 | 定义 | 可重复性 | 有序性 | 只读性 | 添加新元素 |
---|---|---|---|---|---|---|
set | 可变集合 | {1} | 天然去重 | 无序 | 可修改 | add() |
list | 列表/数组 | [1] | 可重复 | 有序 | 可修改 | append() |
tuple | 元组 | (1,) | 可重复 | 有序 | 只读 | --- |
相关链接
- https://newsn.net/say/python-def.html
- https://newsn.net/say/python-dir.html
- https://newsn.net/say/python-set-diff.html
结论
在介绍python
中的函数定义方式的时候,曾经提到过*args,**kwargs
的概念,其中的*args
就是个tuple
,而**kwargs
是个list
。更多python
结论文章,请点击下面的链接:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。