组合数据类型
一 列表
(一) 列表的特有方法
使用方式:列表名.方法名()
1 增加元素
- append(item):将item添加到列表的最后位置。
- insert(pos,item):将item插入的指定位置。
- pos如果超过最大索引,将item插入最后位置
- pos如果小于最小索引,将item插入到最开始位置
- extend(iterable):将序列内元素全部插入到尾部。
names = ['zs','ls','ww']
# 新增同学ml
names.append("ml")
print(names) # ['zs','ls','ww','ml']
# 将ml插入到第一个位置
names.insert(0,'ml') # ['ml','zs','ls','ww']
print(names)
names.insert(1000,'111') # [ 'zs', 'ls', 'ww','111']
names.insert(-1000,'111') # ['111', 'zs', 'ls', 'ww']
names.extend(1,2,3,4) # 错误,只能有一个参数
names.extend([1,2,3,4]) # ['zs','ls','ww',1,2,3,4]
names.extend(range(1,100))
2 删除操作
- 已知索引删元素,返回被删除的元素
- pop():删除最后一个元素
- pop(index):删除指定位置的元素。
- 已知元素删元素:remove(item):删除第一次满足条件的指定元素,不存在会报错
- del 待删的对象,不属于列表特有
- clear:清空列表,只剩空列表
li = [1,2,3,4,5,6,2]
# pop
li.pop() # 删除最后一个元素
# 删除指定位置元素
li.pop(3) # 删除元素4
li.pop(100) # 报错,索引错误
# remove
li.remove(3) # 删除元素3本身
li.remove(10) # 错误,元素不存在
li.remove(2) # 删除第一次出现的元素
# del
del li[2] # 删除元素3
del li # 删除列表li
del li[1:3] # 删除元素2,3
# clear
li.clear() # []
3 修改
通过操作来实现修改
列表名[index] = new_value
- reverse():列表倒序
- sort():按照Unicode编码排序,同种类型才可以比较
li = [1,2,3,4,5,6,2]
li[2] = 30
print(li) # [1,2,30,4,5,6,2]
# reverse()
li.reverse()
print(li) # [6,5,4,3,2,2,1]
# sort
li.sort() # [1, 2, 2, 3, 4, 5, 6]
li2 = ['a','w','e','g']
li2.sort()
print(li2) # ['a','e','g','w']
4 查找
-
已知索引查元素:
列表名[index]
-
已知元素查索引:index(item):将第一个满足条件元素的索引值返回。(保证元素在列表中)
li = [1,2,3,4,5,6,2] li.index(2) # 1 li.index(10) # 报错
-
count(item):统计item在列表中出现的次数
li.count(10) # 0 li.count(2) # 2 li.count(3) # 1
(二) 列表嵌套
li = [1,2,3,[4,5,6]]
print(li[1]) # 2
print(li[3][1]) # 5
print(len(li))
(三)深浅拷贝
- 赋值:修改原列表会影响赋值列表
- 浅拷贝:只拷贝列表的最外层,内部全部引用。修改最外层列表,不会影响浅拷贝对象,修改列表内层对象会影响浅拷贝对象。
- 深拷贝:拷贝所有可变类型,原列表改变不影响深拷贝对象
lst = [1,2,3,4]
lst1 = [1,2,3,[4,5]]
# 赋值
lst2 = lst
lst22 = lst1
# 浅拷贝
lst3 = lst.copy()
lst33 = lst1.copy()
# 深拷贝
import copy
lst4 = copy.deepcopy(lst)
lst44 = copy.deepcopy(lst1)
# 操作
# 增加元素5
# lst.append(5)
# 向内部列表添加元素6
lst1[3].append(6)
# 查看
print(lst) # [1,2,3,4,5]
print(lst2) # [1,2,3,4,5]
print(lst3) # [1,2,3,4]
print(lst4) # [1,2,3,4]
print(lst) # [1,2,3,[4,5,6]]
print(lst22) # [1,2,3,[4,5,6]]
print(lst33) # [1,2,3,[4,5,6]]
print(lst44) # [1,2,3,[4,5]]
l1.append(6)
print(l1) # [1,2,3,[4,5],6]
print(l2) # [1,2,3,[4,5],6]
print(l3) # [1,2,3,[4,5]]
print(l4) # [1,2,3,[4,5]]
l1[3].append(6)
print(l1) # [1,2,3,[4,5,6]]
print(l2) # [1,2,3,[4,5,6]]
print(l3) # [1,2,3,[4,5,6]]
print(l4) # [1,2,3,[4,5]]
(四)列表推导式(高级操作)
1.列表推导式的基本格式:
变量名= [表达式 for 变量 in 列表]
或者
变量名= [表达式 for 变量 in 列表 if 条件]
2.执行流程:
遍历出列表中的内容给变量,表达式根据变量值进行逻辑运算
或者遍历列表中的内容给变量,然后进行判断,符合的值在给表达式
# 练习:将lst中每一个元素进行平方后放入到一个新列表中
lst = [1, 2, 3, 4, 5]
l2 = []
for i in lst:
l2.append(i*i)
print(l2)
# 推导式
l2 = [i*i for i in lst]
3 推导式好处和不足
- 优点:简化代码,提高代码的简洁性
- 不足:降低代码的可读性
二 元组(tuple)
(一) 定义
1 定义:元组是一个不可修改的,元素以逗号分隔的以小括号包围的有序序列。
2 特点:不可修改,有序的,序列。
3 格式:元组名= (item1,item2,...)
注意:空元组可以直接写一对圆括号()
,如果表示只包含 一个元素的元组,该元素后必须添加逗号。
t1 = () # 空元组
t2 = (1,) # 包含一个元素的元组
t3 = (1) # 仅表示数字1,不是元组类型
(二)元组序列操作
- 索引
- 切片
- 拼接和重复
- 赋值
- 遍历
(三)元组的特有方法
1 查看
- 已知索引查元素:
元组名[index]
- 已知元素查索引:
元组名.index(item)
- 统计元素出现次数:
count(item)
( 四 )元组的嵌套和类型转换
list(iterable)/tuple(iterable)
t = (1,'s',1.3,[5,6,7],(8,9,10))
# 获取数字7
t[3][2]
t[2] = 20 # 报错,原因元组不可变
l = list(t) # [1,'s',1.3,[5,6,7],(8,9,10)]
t2 = tuple(l) # (1,'s',1.3,[5,6,7],(8,9,10))
s = "hello world"
t3 = tuple(s) # ('h' ,'e' ,'l' ,'l' ,'o' ,' ' ,'w' ,'o' ,'r' ,'l' ,'d')
t4 = tuple(100) # 报错
枚举:
内置方法:enumerate(iterable,[start=0]):枚举,返回一个元组(index,value)
- 如果遍历该对象,一个变量接收那么该变量是元组类型。如果有两个变量接收,那么第一个变量是编号,第二个为元素本身。
li = [1,2,3,4,5]
t= (6,7,8,9,10)
# 单个变量接收
for i in enumerate(t): #默认从0 开始编号
print(i)
#(0, 6)
#(1, 7)
#(2, 8)
#(3, 9)
#(4, 10)
# 两个变量接收
for i,j in enumerate(li,start=100): # 从100开始编号
print("编号是:",i)
print("对应的元素是:",j)
#编号是: 100
#对应的元素是: 1
#编号是: 101
#对应的元素是: 2
#编号是: 102
#对应的元素是: 3
#编号是: 103
#对应的元素是: 4
#编号是: 104
#对应的元素是: 5
(五)应用场景
- 用户自定义元组:需要保存的数据为不能改变的内容。用元组保存全班人的姓名
,一个变量接收那么该变量是元组类型。如果有两个变量接收,那么第一个变量是编号,第二个为元素本身。
li = [1,2,3,4,5]
t= (6,7,8,9,10)
for i in t:
print(i)
# 单个变量接收
for i in enumerate(t): #默认从0 开始编号
print(i)
# 两个变量接收
for i,j in enumerate(li,start=100): # 从100开始编号
print("编号是:",i)
print("对应的元素是:",j)