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——垃圾回收机制

 

 

 

posted @ 2020-08-15 11:46  萝卜园  阅读(147)  评论(0编辑  收藏  举报