版本:python3.7。
笔记来源于B站小甲鱼教程
元组
与列表一样可以容纳多种类型的对象
>>> rhyme=(1,2,3,4,5,"上山打老虎")
>>> rhyme
(1, 2, 3, 4, 5, '上山打老虎')
#不带括号也可以
>>> rhyme=1,2,3,4,5,"上山打老虎"
>>> rhyme
(1, 2, 3, 4, 5, '上山打老虎')
#同样可以用下标获取元素
>>> rhyme[0]
1
>>> rhyme[-1]
'上山打老虎'
与字符串一样拥有不可变的特性
修改元组会报错
>>> #修改元组会报错:
>>> rhyme[1]=23
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
rhyme[1]=23
TypeError: 'tuple' object does not support item assignment
>>> #元组修改报错:TypeError: 'tuple' object does not support item assignment
元组支持切片操作
>>> #元组支持切片操作:
>>> rhyme[:3]
(1, 2, 3)
>>> #用法与列表相同
>>> rhyme[::2]
(1, 3, 5)
>>> rhyme[::-1]
('上山打老虎', 5, 4, 3, 2, 1)
>>> #切片操作之后导出一个新的对象
获取索引、拼接、重复
#数数和获取索引值:
>>> nums=(3,4,56,1,3,5,6)
>>> nums.count(3)
2
>>>
>>> heros=("冰淇淋","鸡肉卷","三号楼")
>>> heros.index("三号楼")
2
>>> #拼接和重复(加、乘运算):
>>> s=(1,2,3)
>>> t=(4,5,6)
>>> s+t
(1, 2, 3, 4, 5, 6)
>>> s*3
(1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> s*t#这个是不对的
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
s*t
TypeError: can't multiply sequence by non-int of type 'tuple'
元组的嵌套
>>> s=(1,2,3)
>>> t=(4,5,6)
>>> w=s,t#嵌套
>>> w
((1, 2, 3), (4, 5, 6))
#以上为嵌套
>>> for each in s:
print(each)
1
2
3
#嵌套循环:
>>> for i in w:
for each in i:
print(each)
1
2
3
4
5
6
>>> s=(1, 2, 3, 4, 5, 6)
>>> [each*2 for each in s]#使用列表推导式
[2, 4, 6, 8, 10, 12]
>>> (each*2 for each in s)#圆括号行不行呢?
<generator object <genexpr> at 0x0000025B57C80448>
#报错了,所以列表推导式只能用方括号
>>> x=(520,)
>>> x
(520,)
>>> type(x)
<class 'tuple'>
#生成元组称为元组的打包:
>>> t=(123,"fishc",3.14)
>>> t
(123, 'fishc', 3.14)
#一次性复制为多个变量名的行为称为解包:
>>> x,y,z=t
>>> x
123
>>> y
'fishc'
>>>
>>> z
3.14
#一次性多个赋值也适用于列表
>>> t=[123,"fishc",3.14]
>>> x,y,z=t
>>> x
123
>>> y
'fishc'
>>> z
3.14
>>> a,s,d,f,g="fishc"#也试试将字符串赋值给多个变量名
>>> a
'f'
>>> s
'i'
>>> d
's'
>>> f
'h'
>>> g
'c'
#规则:赋值号左边的变量名数量必须跟右侧序列的元素数量一致,否则报错:
>>> a,s,d="fishc"
Traceback (most recent call last):
File "<pyshell#81>", line 1, in <module>
a,s,d="fishc"
ValueError: too many values to unpack (expected 3)
#或者进行容错处理:
>>> a,s,*d="fishc"#添加*,将剩下的字符赋值给d变量
>>> a
'f'
>>> s
'i'
>>> d #将剩下的字符赋值给d变量
['s', 'h', 'c']
>>>
>>> #python多重赋值功能:
>>> x,y=10,20
>>> x
10
>>> y
20
#背后逻辑:先将元组进行打包,再将元组进行解包
>>> #元组里包含列表是可以被修改的:
>>> s=[1,2,3]
>>> t=[4,5,6]
>>> w=(s,t)#创建含列表的元组
>>> w
([1, 2, 3], [4, 5, 6])
>>> w[1][2]=12#进行赋值修改
>>> w
([1, 2, 3], [4, 5, 12])
>>> #所以如果指向一个列表,那么就可以依然修改列表中的元素