1

tuple 元组

今天跟大家分享一下Python里面tuple数据类型的学习
ps:list数据类型,之前是写在了jianshu上,暂时我也还没有搬过来,所以贴上链接吧

Python数据类型 - list : https://www.jianshu.com/p/5fe...


概念

tuple,即元组。是Python内置的一种有序列表。跟list相比,tuple有比较特别的地方。

  • tuple不可变,一旦初始化定义后就不能修改。所以在定义的时候,元素值最好就确定下来。
  • tuple获取元素的方法与list一致。但是它没有append()、insert()等方法。

那tuple有什么好处呢?因为不可变,所以代码更加安全。如果可以,尽量用tuple代替list。


一、tuple定义

1、 定义一个空tuple

    t = ()
    t  # 调用
    输出:()

2、 定义一个只有一个元素的tuple

如下示例,注意比较“t”与“s”的区别,通过type()函数也可以清楚的看到。

>>> t = ('xyz')
>>> t
'xyz'
>>> type(t)
<class 'str'>
>>>
>>> s = ('abc',)
>>> s
('abc',)
>>> type(s)
<class 'tuple'>
>>>

ps:本来贴的图片,发现不方便看 -_-

  • 注意哦,必须要添加一个逗号“,”,来消除歧义。

3、定义一个多个元素的tuple

    t = (1,2,'abc')
    t # 调用
    输出:(1,2,'abc')

二、“可变的”tuple

  • 刚才说tuple不可变,现在为何说“可变”呢?试想tuple里的元素是list类型时。

>>> t = ('a','b',['c','d'])       # tuple里包含可变的list
>>> t [2][0]
'c'
>>> t[0][1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> t [2][0] = 'C'                # 修改tuple中的list类型值
>>> t
('a', 'b', ['C', 'd'])
>>> t[0][0] = 'e'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

块一中修改tuple中list的元素,tuple没有变,变的是list的元素。
tuple一开始指向的list并没有改变成别的list,id(list)没有变化。所以,tuple所谓的“不变”,是说tuple的每个元素指向永远不变,但是指向的list内容是可变的。

  • 另一种方法改变tuple

>>> h = ('a','b','c')
>>> h1 = ('A',) + h[1:]  # 用slice方法取得列表的一部分,其实是重新给对象赋值
>>> h1
('A', 'b', 'c')

三、序列赋值

(1)Python中,tuple类型为默认的集合类型

Python中,赋值可以采用序列赋值的方式,如下

>>>a,b = 1,2
>>>a,b
>>>(1,2)

clipboard.png

(2)tuple序列作为函数默认的返回值类型,所有不包括符号封装的函数返回值都是元组类型

python函数返回值是一个tuple类型的值。返回值为一个时,括号省略;返回值为多个时,为同一个tuple接收,并把位置赋给相应的值。
若要返回一个list类型,则显示用“[]”进行修改。

def swap(x,y):
    return y,x        # return [y,x] 或者 return(y,x)
>>> swap(2,3)
(3, 2)

四、tuple的函数操作

(1) 两个元组的合并操作

  • 两个tuple连接操作:tuple_a + tuple_b
  • tuple乘操作:tuple_a * int_number

实际效果如下图:
clipboard.png

(2) in操作符

判断元素i是否在tuple_a中,返回True or False。

if i in tuple_a :
    <action>

(3) 访问元组元素

通过切片来访问元组的元素,它的切片操作跟列表list是一样,也是通过“切片操作符[]”+索引index来访问。

(4) 一些内建函数

  • len():
  • max():
  • min():
  • str():类型转换为string
  • list():类型转换为list
  • operator模块:可以调用里面的比较操作函数、逻辑操作函数、数学操作函数等,感兴趣的可以去看看operator.py文件源码,或者官网教程哦~

(5) 比较操作符

元组还可以进行一些比较操作符的操作,比如“>”、“<”、“==”等,跟数学里一样,对应元素值跟对应元素值进行比较,返回True或者False。
“大于”和“小于”只能比较同类型的tuple,如下示例:

>>> a = (1,2)
>>> b = ('a','b')
>>> c = (1,2,3)
>>> a > b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'int' and 'str'
>>>
>>> a == c
False

大家可以随意去操作一下,就能清楚了,不算是重点。


有小伙伴能告诉我,专栏里的文章如何改变排序吗?


unpredictable_X
34 声望17 粉丝

热爱学习,热爱生活