第六章:基本数据类型(列表、元组、字典、集合)
一、列表 list()(可变序列)
1、作用
按位置存放多个值,元素可以重复。属于序列,即存和取的顺序是一样的。
2、定义(可变类型)
list[索引不存在] = ‘添加的数据’ 会报错
# 定义空列表
lit = []
lit = list()
lit = [1] # 只存放一个元素
lit = [1,'sunoeast'] # 存放多个元素用逗号隔开
# 列表中存放的数据必须是可迭代对象:list(可迭代对象)
lit = ['可迭代对象']
# 相当于:
l = []
for i in '可迭代对象':
l.append(i)
# 最好不要直接用lit.append(i),不要随意更改原列表的内容
3、类型转换
只要能够被for循环遍历的类型都可以当作参数传递给 函数list()转成列表。
result = list('hello world')
print(type(result))
result = list({
'key1':111,'key2':222})
print(type(result))
print(result) # 这里for遍历的只有key,所以输出的列表也只有key
print(list(1)) # 整形不是可迭代对象,所以会报错
4、查找(取出)列表中的值
1、根据索引取值
根据索引操作,无论是取值操作还是赋值操作:索引不存在则报错
lit = [1,'hello','world','sunoeast',[2,3,4]]
print(lit[0]) # 相应的索引取出对应的值/元素
print(lit[-1])
# print(lit[7]) #索引不存在会报错
print(lit[-1][1]) # 列表中嵌套的取值
# 修改
lit[0] = 2 # 修改索引为0的值的内容
2、根据切片取值
# 顾头不顾尾
lit = [1,'hello','world','sunoeast',[2,3,4]]
print(lit[0:2]) # [1, 'hello']
print(lit[0:4:2]) # [1, 'world']
print(lit[1:7]) # 超出范围不会报错,会输出开始索引的位置及后面的所有值
根据切片修改
# 利用索引赋值必须赋值给可迭代对象类型
lit = [1,'hello','world','sunoeast',[2,3,4]]
lit[0:3] = '1' # 触发list('1')
# lit[0:3] = 1 # 这里实际是触发了list(1),所以会报错TypeError
li = lit[:] # 相当于拷贝,而且是浅拷贝
print(lit,id(lit))
print(li,id(li))
l = lit[::-1] # 列表倒序,不会改变原列表,这里不是排序
print(l) # [[2, 3, 4], 'sunoeast', 'world', 'hello', 1]
print(lit) # [1, 'hello', 'world', 'sunoeast', [2, 3, 4]]
3、列表中查找方法index()
列表中查找元素只有index()方法,没有找到元素会报错,通常可以用成员运算来判断这样使用起来更加安全。
lit = [1,2,2,3,4]
print(lit.index(2)) # 返回元素2首次出现的下标/索引 1 。
5、往列表中增元素
1、末尾追加 append()方法
可以追加任何类型,但是一次只能追加一个元素或者一个整体
# 格式:需要追加的列表.append('追加的任何类型元素')
lit = [1,2]
lit.append(3)
print(lit)
# 结果:[1, 2, 3]
lit1 = [5,6]
lit.append(lit1) # 当成(一个元素)整体添加
print(lit)
# 结果:[1, 2, 3, [5, 6]]
2、追加到指定位置 insert()方法
可以插入任何类型,但是一次只能插入一个元素。如果索引不存在添加到开头或末尾。
# 格式:需要追加的列表.insert(索引,'追加的任何类型元素')
lit = [1,2,3]
lit.insert(0,4)
print(lit) # 结果:[4, 1, 2, 3]
lit1 = [6,7]
lit.insert(1,lit1) # 当成一个元素添加
# 结果:[4, [6, 7, 5], 1, 2, 3]
# 如果索引不存在添加到开头或末尾
lit = [1,2,3]
lit.insert(7,5)
print(lit) # 结果:[1, 2, 3, 5]
lit.insert(-7,8)
print(lit) # 结果:[8, 1, 2, 3, 5]
3、添加多个值 extend()方法
只能添加可迭代对象。
# 格式:需要添加的列表.extend('添加的可迭代对象')
lit = [1,2,3]
lit1 = [4,5]
lit.extend(lit1)
print(lit)
# 结果:[1, 2, 3, 4, 5]
lit.extend('1')
print(lit)
# 结果:[1, 2, 3, 4, 5, '1']
# lit.extend(1) # 报错
# 底层代码逻辑:
for item in lit1:
lit.append(item)
print(lit)
6、删除列表中的元素
通常需要先判断元素是否存在,不存在的值使用删除会引发程序报错。
1、通用的删除 del语句
它没有返回值
lit = [1,2,3,4,5,6]
# 根据索引删除,索引不存在会报错
del lit[0] # result = del lit[0] 抛出异常,del语句不支持赋值语法
print(lit) # 结果:[2, 3, 4, 5, 6]
# 根据切片删除
del lit[0:3]
print(lit) # 结果:[5, 6]
# 清空列表中的元素
del lit[:]
print(lit) # 返回一个空列表
# 删除列表
del lit
# print(lit) # 列表已经删除,会提示变量lit没有定义
2、取出元素 pop()方法
可以根据索引取值,默认取出最后一个元素,返回值就是取出的元素。
默认就是取出最后一个元素,如果索引不存在会报错。
# 格式:需要取值的列表.pop('索引(不指定就是最后一个元素)')
lit = [1,2,3,4,5,6]
l = lit.pop()
print(l) # 结果:6
li = lit.pop(1)
print(li) # 结果:2
# lit1 = lit.pop(7) # IndexError
3、根据指定的元素删除 remove()方法
有元素会返回None,可以视为无返回值。删除的值不存在会报错。
# 格式:需要删除元素的列表.remove('需要删除的元素')
lit = [1,2,3,4,5,6]
lit.remove(3)
print(lit) # [1, 2, 4, 5, 6]
# lit.remove(8) # 会报错:ValueError