Python入门系列之元组
Python系列的学习请点击:https://www.cnblogs.com/lbyy/category/1820463.html
序列
继上节提到的序列,到底什么是序列呢?它跟列表有什么关系?
在python中有六大基本数据类型,除了数字类型之外的五大类型,均可以看作是一个序列。所以序列到底是个什么东西?官方一点:序列就是按一定规则排成列的对象,这个规则就是顺序。谁在前谁在后,谁的前'面是谁,谁的后面是谁,都一眼能够看得出来。比如说列表 List = ['a', 'b', 'c', 'd']有四个元素,第一个元素是字符串 ’a',它的后面是字符串'b', 顺序很直观。
那么我们来列个等式 序列 = 列表、字符串、元组、字典、集合,既然列表只是序列的一种,列表有哪些操作来着??索引?切片?加法运算?乘法运算?这些都是序列的特性其实(儿子有的父亲一般也会有)。
这也就是为什么在上一节,我会在很多地方反复提及序列二字而不是列表。A tuple is the son of a sequence!so,它也可以进行索引和切片的操作,方法和列表是一样的,只是对象改成了元组而已。直接上个演示代码,就不详细说了。
1 this_tuple = ('a', 'b', 'c', 1, '1', []) # 定义一个元组
len函数
1 tuple_len = len(this_tuple) # 得到元组的长度,即有多少个元素 结果是6
元组——索引
# 对元组进行索引 index_a = this_tuple[0] # 索引0号位元素 得到 字符串 a index_b = this_tuple[1] # 索引1号位元素 得到字符串 b index_c = this_tuple[2] index_1 = this_tuple[3] index_str_1 = this_tuple[4] index_list = this_tuple[-1] # 索引最后一位元素 得到空列表 或者index_list = this_tuple[5]
切片
1 # 获取前三个元素 ('a', 'b', 'c') 2 get_first_three = this_tuple[:3]
# 获取第4个元素到最后一个元素之间的元素 (1, '1', []) get_n_last = this_tuple[3:]
反着切(切片的方向由步长决定,默认是1,从左往右)
1 # 从右边开始切:获取最后一个元素到第一个元素 ([], '1', 1, 'c', 'b', 'a') 2 get_last_first = this_tuple[::-1]
元组的加法
元组的加法与列表是有区别的,因为python中的元组属于不可变类型,列表是可变的类型。咦!不可变类型也能做加法运算??of course,不可变指的是这个对象本身被创建后不可再改变,要改变这个对象其实是创建了一个新的对象,也就是说,元组的加法运算没有改变运算前原来的那个元组,而是在进行运算的同时新建了一个元组,列表则是在本身的基础上进行了修改
1 this_tuple = ('a', 'b', 'c', 1, '1', []) # 定义一个元组 2 print(id(this_tuple)) # 打印元组在内存的id地址 3 # 20139624 4 5 this_tuple += (2,) # 元组this_tuple加上一个元组(2,)再赋值给变量this_tuple 6 print(id(this_tuple)) # 打印运算后元组在内存的id地址 7 # 49243896
1 this_list = ['a', 'b', 'c', 1, '1', []] # 定义了一个列表 2 print(id(this_list)) # 打印列表在内存的id地址 3 # 20237088 4 5 this_list += [2] # 列表this_list加上列表[2]再赋值给变量this_list 6 print(id(this_list)) # 打印列表在内存的id地址 7 # 20237088
上面的两段代码我们得出了结论,列表的加法没有改变源对象,因为列表时可变对象(创建后本身可以被修改),元组两次的id地址是不同的,也就是在内存中开辟了两个空间(内存一个id指向一个空间,同一个对象在创建后被销毁前永远只会在这个空间)所以,新开辟了一个空间是用来储存后面的新对象,也就是元组加法运算后新建的元组对象
元组的乘法
同样的元组的乘法也是新建了一个对象,源对象没有被改变
this_tuple = ('a', 'b', 'c', 1, '1', []) # 定义一个元组 print(this_tuple*2) # ('a', 'b', 'c', 1, '1', [], 'a', 'b', 'c', 1, '1', [])
index函数
返回元素的第一个索引,如果元素不存在,会返回valueError
1 this_tuple = ('a', 'b', 'c', 2, 2, []) # 定义一个元组 2 3 print(this_tuple.index(2)) # 返回元素空列表的第一个索引位 4 # 3
count函数
返回元组中元素出现的次数
1 this_tuple = ('a', 'b', 'c', 2, 2, []) # 定义一个元组 2 print(this_tuple.count(2)) # 返回元素数字2 出现的次数 3 # 2
关于内存补充知识:
在计算机中数据都是存在硬盘中或内存中(其实内存也是硬盘的一种,它们的区别在于前者是储存永久性数据,后者是临时储存数据)用Python编写的脚本,在里面创建了一个列表,那这个列表在程序运行的时候,就被存在了内存中直到程序停止才会被销毁,内存被回收,具体可以去了解一下Python的GC——垃圾回收机制。