容器型数据类型——元组
Python中容器型的数据类型肯定不止列表一种,接下来我们学习另一种重要的容器型数据类型,它的名字叫元组(tuple)。
注意!!!:元组—>不可变的容器 只能读操作 不能写操作
元组的基本运用
fruits = ('hello',)
fruits = ('hello')
fruits1 = ('apple', 'banana', 'grape')
print(fruits1 * 3)
print('apple'in fruits1)
print('grape' not in fruits1)
fruits2 = ('pitaya','litchi')
fruits3 = fruits1 + fruits2
print(fruits3)
print(fruits3[4],fruits3[-5])
print(fruits3[1:4])
print(fruits3[1:4:2])
print(fruits3[::-1])
for fruit in fruits:
print(fruit)
print(fruits3.index('apple'))
print(fruits3.count('apple'))
元组的应用
打包和解包操作。
当我们把多个用逗号分隔的值赋给一个变量时,多个值会打包成一个元组类型;当我们把一个元组赋值给多个变量时,元组会解包成多个值然后分别赋给对应的变量,如下面的代码所示。
a = 1, 10, 100
print(type(a), a)
i, j, k = a
print(i, j, k)
在解包时,如果解包出来的元素个数和变量个数不对应,会引发ValueError 异常,错误信息为:too many values to unpack (解包的值太多)或not enough values to unpack (解包的值不足)。
a = 1, 10, 100, 1000
有一种解决变量个数少于元素的个数方法,就是使用星号表达式,我们之前讲函数的可变参数时使用过星号表达式。有了星号表达式,我们就可以让一个变量接收多个值,代码如下所示。需要注意的是,用星号表达式修饰的变量会变成一个列表,列表中有0个或多个元素。还有在解包语法中,星号表达式只能出现一次。
a = 1, 10, 100, 1000
i, j, *k = a
print(i, j, k)
i, *j, k = a
print(i, j, k)
*i, j, k = a
print(i, j, k)
*i, j = a
print(i, j)
i, *j = a
print(i, j)
i, j, k, *l = a
print(i, j, k, l)
i, j, k, l, *m = a
print(i, j, k, l, m)
*a, b ,c = 5, 10, 15, 20, 25
print(a)
print(b)
print(c)
print('--'*20)
a, *b ,c = 5, 10, 15, 20, 25
print(a)
print(b)
print(c)
print('--'*20)
a, b ,*c = 5, 10, 15, 20, 25
print(a)
print(b)
print(c)
交换两个变量的值
python不像其他语言一样需要中间变量才能转换两个变量的值
如a 与 b 两个变量交换值 在c语言当中 就需要以下步骤
c = a
b = c
a = b
而python则不需要直接写成以下格式即可 a 赋给b ,b 赋给a
a, b = b, a
交换三给变量的值同样用此方法a 、b 、c 的值互换,即b 赋给a ,c 赋给b ,a 赋给c
a, b, c = b, c, a
列表与元组的转换
info = ('李四', 170, True, '贵州贵阳')
print(list(info))
fruits = ['apple', 'banana', 'orange']
print(tuple(fruits))
总结
? 列表和元组都是容器型的数据类型,即一个变量可以保存多个数据。列表是可变数据类型,元组是不可变数据类型,所以列表添加元素、删除元素、清空、排序等方法对于元组来说是不成立的。但是列表和元组都可以进行拼接、成员运算、索引和切片这些操作,就如同之前讲到的字符串类型一样,因为字符串就是字符按一定顺序构成的序列,在这一点上三者并没有什么区别。我们推荐大家使用列表的生成式语法来创建列表,它很好用,也是Python中非常有特色的语法。
|