上一章的列表内容有点多,需要时间进行消化。本篇来看看与其类似,但又不同的一个内容。
元组
元组使用小括号(),也称为圆括号来表示。也可以不使用这样的方式,直接用,隔开就好。看例子:
# 定义一个元组 fly= '清安','有一个小屋' print(type(fly)) fly1 = ('小屋','很不错') # 我们可以像列表那样打印它 print(fly1[0]) print(fly1[1]) # <class 'tuple'> # 小屋 # 很不错
元组也能跟range搭配使用,快速的生成一个元组出来:
b = tuple(range(6)) print(b) # (0,1,2,3,4,5)
元组可以像列表一样进行打印,但是却不能像列表那样进行修改元素值
# 定义一个元组, fly = (200, 20) # 修改元素的值,这操作是不允许的 # fly[0] = 100 # 我们可以像列表一样用索引获取它的值 print(fly[0]) print(fly[1])
修改元组的元素,python就会报错!告诉你fly[0] = 100,这里是不可行的。如下的例子也是一样:
t = ('a', 'b', ['A', 'B']) t[2][0] = 'X' t[2][1] = 'Y'
遍历
# 定义一个元组, fly = (200, 20, 30) for fly_num in fly: print(fly_num)
写法其实跟列表的没什么太大的区别,都是通过定义变量fly_num去循环元组的变量fly然后进行打印。
修改元组
我们上一个例子中元组的两个值虽然不能直接的改变,但是我们可以重新定义变量!!!
# 定义一个元组, fly = (200, 20) for fly_num in fly: print(fly_num) # 再次定义一个相同的变量 fly = (400,40) # 使用上一个相同的变量进行for循环 for fly_num in fly: print(fly_num)
这样子我们的fly变量的值就改变了,这样子写在python中也是允许的,合法的,就是麻烦了点啦!
元组还是跟列表有一定区别,最为明显的就是元组用()表示,列表用[]表示,可别看错了。元组也是不可变的,不能像字符串一样被修改,添加,删除。
list_number = ('tom','luci','xifa','BOB') list_number[1] = 'mm' print(list_number)
这里用下标值进行修改,就会报出对象不支持分配的错误,如:
Traceback (most recent call last): File "D:/Python/TuLing/草稿.py", line 20, in <module> list_number[1] = 'mm' TypeError: 'tuple' object does not support item assignment
注意:这是一个错误的例子!!!
类型转换
list_number = ('tom','luci','xifa','BOB') print(list(list_number)) # 元组转换成列表: # ['tom', 'luci', 'xifa', 'BOB']
list_number = ['tom','luci','xifa','BOB'] print(tuple(list_number)) # 列表转换成元组: # ('tom', 'luci', 'xifa', 'BOB')
取值
元组取值也是用下标取值的
list_number = ('tom','luci','xifa','BOB','清安无别事') print(list_number[-1]) # 其结果是 # 清安无别事
排序
c = (4,6,2,1) print(tuple(sorted(c))) # (1, 2, 4, 6)
要知道sorted函数是对原有的元组或者列表进行拷贝一次,然后对拷贝后的元组或列表进行修改。
zip方法
c = (4,6,2,1) d = (1,2,3,4) # zip返回列表对象,一一对应的关系 f = zip(d,c) print(list(f)) # [(1, 4), (2, 6), (3, 2), (4, 1)]
这里的list只起转换的作用。这里你会发现zip会拿d的0索引位跟c的0索引位进行相匹配,然后依次匹配。这是zip方法的一个特殊的用处。
列表推导式
列表中有推导式,元组也是有的。
g = (aa*2 for aa in range(5)) print(tuple(g)) # (0, 2, 4, 6, 8)
总结
1.元组的核心特点是:不可变序列。
2.元组的访问和处理速度比列表快。
3.与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用。