注意:
1、可迭代对象:只要是能用for循环遍历的就是可迭代对象。比如:那五个:列表、元组、集合、字典、字符串。
2、序列:一块可以存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(也就是索引)访问它们。即:只要是有索引的就是序列。比如:列表、元组、字符串。
3、可变数据类型:列表、集合、字典。(也就是不可哈希,因为它们在改变值的同时,却没有改变id。)
4、不可变数据类型:数字(数值型)、元组、字符串。(也就是可哈希,就是说这个对象的哈希值在其生命周期内一直保持不变。)
5、元组类似一个只读列表,列表中的方法只要不涉及到成员值的修改,那么这些方法元组都能用。
6、创建一个只有一个成员的元组,成员值后面要加逗号。
例如:tuple1 = 1, 或 tuple1 = (1,)
一、元组——tuple
元组可以理解为一个只读的列表。只要不涉及到修改成员的值,所有适用列表的方法,元组也通用。即:元组的元素不能修改,也就不能进行增删改、排序的操作。因为排序会涉及值位置的改变。
元组用( )来定义。()也可以省略不写,但是,只要当元组中只有一个成员时,不管有没有括号,成员后面必须加逗号。否则结果就是个字符串。
例如:定义只有一个元素的元组、定义有多个元素的元组。
tuple0 = () # 定义一个空元组,名字叫tuple0
tuple1 = (1, 2, "张三") # 定义一个元组,有3个成员
tuple2 = 1, 2, "张三" # 同上
tuple3 = 1, # 元组中只要一个值,后面必须加逗号
tuple4 = (1,) # 同上
print(tuple0)
print(tuple1)
print(tuple2)
print(tuple3)
print(tuple4)
结果:
()
(1, 2, '张三')
(1, 2, '张三')
(1,)
(1,)
例如:定义一个成员时,后面么加逗号。
tuple1 = "苹果", # 这是一个元组
tuple2 = "苹果" # 这是字符串
tuple3 = ("苹果") # 这也是字符串,一个不符合规范的字符串
print(tuple1)
print(tuple2)
print(tuple3)
结果:
('苹果',)
苹果
苹果
二、元组的常用方法
与列表类似,不同的是,元组的内容不能修改,所以也就没有了增加、删除、修改、排序等的相关方法。即:元组只有查看、count、index、公共方法,以及遍历元组。
查看元组的所有方法:结果可知,常用的有count、index。
print(dir(tuple)) # 查看元组所有的方法
结果:
['__add__', '__class__', '__contains__', '__delattr__',
'__dir__', '__doc__', '__eq__', '__format__',
'__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__gt__', '__hash__', '__init__',
'__init_subclass__', '__iter__', '__le__', '__len__',
'__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmul__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__',
'count', 'index']
1、查看
元组名[索引]——得到该索引上的成员值,但是不能修改该值。
tuple1 = ("苹果", "香蕉", "梨")
print(tuple1[0]) # 查看第一个元素
结果:
苹果
2、count(值)
3、index(值,开始查找的索引)
tuple1 = ("苹果", "香蕉", "梨", "苹果")
print(tuple1.count("苹果")) # 查看苹果出现几次
print(tuple1.index("苹果", 1)) # 从下标1开始查找苹果,结果返回苹果的下标
结果:
2
3
4、公共方法
tuple1 = (3, 6, 2, 7, 9)
print(len(tuple1))
print(max(tuple1))
print(min(tuple1))
print(3 in tuple1) # 3在里面吗?
print(3 not in tuple1) # 3不在里面吗?
结果:
5
9
2
True
False # 说明在
5、for遍历元组
tuple1 = ("苹果", "香蕉", "梨", "苹果")
for i in tuple1:
print(i)
结果:
苹果
香蕉
梨
苹果
6、元组和列表之间的转化
list1 = [1, 4, 3]
tuple1 = tuple(list1) # 列表转元组
print(tuple1)
tuple2 = (6, 7)
list2 = list(tuple2) # 元组转列表
print(list2)
结果:
(1, 4, 3)
[6, 7]
7、元组加到列表上
注意区分:加的是元组里面的成员(元组里面值),还是元组。
例如:把元组里的元素追加到列表上。
解析:就是说把成员加到列表后面。用extend、append、insert这三种方法都可以。
# 法1
list1 = ["苹果", "香蕉", "橘子"]
tuple1 = ("哈密瓜", "火龙果")
list1.extend(tuple1) # extend是追加
print(list1)
结果:
['苹果', '香蕉', '橘子', '哈密瓜', '火龙果']
#法2
list1 = ["苹果", "香蕉", "橘子"]
tuple1 = ("哈密瓜", "火龙果")
a = 3 # !!!因为是追加,所以加进行下标是从最后一个下标+1开始
for i in tuple1:
list1.insert(a, i) # insert比较灵活,可以添加任意指定位置
a += 1
print(list1)
结果:
['苹果', '香蕉', '橘子', '哈密瓜', '火龙果']
#法3
list1 = ["苹果", "香蕉", "橘子"]
tuple1 = ("哈密瓜", "火龙果")
for i in tuple1:
list1.append(i) # append也是追加
print(list1)
结果:
['苹果', '香蕉', '橘子', '哈密瓜', '火龙果']
小结:append、extend都是末尾追加,即:都是加到原列表的末尾,而insert比较灵活,它可以加到列表的任意指定位置。
延申:把元组加到后面。
list1 = ["苹果", "香蕉", "橘子"]
tuple1 = ("哈密瓜", "火龙果")
list1.append(tuple1)
print(list1)
结果:
['苹果', '香蕉', '橘子', ('哈密瓜', '火龙果')]
例如:把元组的成员加前面。此时只能用insert这一种方法。
#法1
list1 = ["苹果", "香蕉", "橘子"]
tuple1 = ("哈密瓜", "火龙果")
list1.insert(0, tuple1[0])
list1.insert(1, tuple1[1])
print(list1)
结果:
['哈密瓜', '火龙果', '苹果', '香蕉', '橘子']
#法2————推荐
list1 = ["苹果", "香蕉", "橘子"]
tuple1 = ("哈密瓜", "火龙果")
a = 0 # !!!!前面话,下标是0
for i in tuple1:
list1.insert(a, i)
a += 1
print(list1)
结果:
['哈密瓜', '火龙果', '苹果', '香蕉', '橘子']
尤其要注意法2,改变a的值,意味着,元组的成员可以放到任意位置。
list1 = ["苹果", "香蕉", "橘子"]
tuple1 = ("哈密瓜", "火龙果")
a = 0 # 关键
for i in tuple1:
list1.insert(a, i)
a += 1
print(list1)
结果:
['哈密瓜', '火龙果', '苹果', '香蕉', '橘子']