元组与列表
4月10
- 列表的应⽤场景
- 列表的格式
- 列表的常⽤操作
- 列表的循环遍历
- 列表的嵌套使⽤
- 元组的应⽤场景
- 定义元组
- 元组常⻅操作
列表的应用场景
思考:如果⼀个班级100位学⽣,每个⼈的姓名都要存储到变量,应该如何书写程序?声明100个变量吗?
答:列表即可, 列表⼀次性可以存储多个数据。
列表形式
列表可以一次性存多个数据,且可以为不同类型的数据类型
li1 = ["123", "王五", "李四"]
列表的常用操作
列表的作用是一次性存储多个数据,可以对这些数据进行
增
,删
,改
,查
操作
查询
根据小标查询
li1 = ["123", "王五", "李四"]
print(li1[0])
print(li1[1])
print(li1[2])
函数
- index():返回指定数据所在位置的下标
语法
# 列表序列.index(数据, 开始位置下标, 结束位置下标)
li1 = ["张三", "李四", "王五", "张三"]
print(li1.index("张三", 1, 4))
- count(): 统计指定数据在当前列表中出现的次数
li1 = ["张三", "李四", "王五", "张三"]
print(li1.count("张三")
- len(): 访问列表长度,即列表中数据的个数
li1 = ["张三", "李四", "王五", "张三"]
print(len(li1))
- in 与 not in
in:判断指定数据在某个列表中,存在则返回Ture,不在返回Fulse
not in:判断指定数据在某个列表中,存在着为Fulse,不在返回Ture
li1 = ["张三", "李四", "王五", "张三"]
name = input("请输入你要找的人:")
if name in li1:
print("{}他在这里".format(name))
else:
print(f"{name}他不在")
增加
作用:增加指定数据到列表中
函数
- append():列表结尾追加数据
# 列表序列.append(数据)
li1 = ["张三", "李四", "王五"]
li1.append("yuwen")
print(li1)
#输出结果
['张三', '李四', '王五', 'yuwen']
如果appand(),追加的数据是一个序列,则追加整哥序列到列表中
li1 = ["张三", "李四", "王五"]
li2=["篮球","足球","乒乓"]
li1.append(li2)
print(li1)
#输出结果
['张三', '李四', '王五', ['篮球', '足球', '乒乓']]
li1 = ["张三", "李四", "王五"]
print(id(li1))
li1.append("yuwen")
print(li1,id(li1))
#输出结果
2192101762560
['张三', '李四', '王五', 'yuwen'] 2192101762560
# 列表是可变的
# 修改之后,内存地址如果不变,那他就是
- extend():
列表尾部追加数据,如果数据是一个序列,则将这个序列数据逐一添加列表
li1 = ["张三", "李四", "王五"]
li1.extend("yuwen")
print(li1)
#输出结果
['张三', '李四', '王五', 'y', 'u', 'w', 'e', 'n']
如果添加的一个序列,则序列会将序列里每一个元素添加进去
li1 = ["张三", "李四", "王五"]
li2 = ["篮球", "足球", "乒乓"]
li1.extend(li2)
print(li1)
#输出结果
['张三', '李四', '王五', '篮球', '足球', '乒乓']
- insert():指定位置插入数据
语法:
li1 = ["张三", "李四", "王五"]
li1.insert(2,"yuwen")
print(li1)
#输出结果
['张三', '李四', 'yuwen', '王五']
删除
输出列表中的数据
- del:
删除整个列表
#del 数据列表
li1 = ["张三", "李四", "王五"]
del li1
print(li1)
#输出结果
NameError: name 'li1' is not defined
删除指定数据(根据索引删除)
li1 = ["张三", "李四", "王五"]
del li1[1]
print(li1)
#输出结果
['张三', '王五']
- pop():删除指定下标(默认是最后一个),并返回该删除后的结果
li1 = ["张三", "李四", "王五", "赵六"]
li1.pop()
print(li1)
li1.pop(0)
print(li1)
#输出结果
['张三', '李四', '王五']
['李四', '王五']
- remove():删除列表中第一个匹配项
li1 = ["张三", "李四", "王五", "张三"]
li1.remove("张三")
print(li1)
#输出结果
['李四', '王五', '张三']
- clear():清除列表
li1 = ["张三", "李四", "王五", "张三"]
li1.clear()
print(li1)
#输出结果
[]
修改
修改指定下标数据
直接修改
li1 = ["张三", "李四", "王五", "张三"]
li1[0] = "yuwen"
print(li1)
#输出结果
['yuwen', '李四', '王五', '张三']
- reverse():逆置
li1 = ["张三", "李四", "王五", "12312", "abc"]
li1.reverse()
print(li1)
#输出结果
['abc', '12312', '王五', '李四', '张三']
- sort()
排序
语法
reverse表示排序规则,reverse = True 降序, reverse = False 升序(默认)
# 列表序列.sort(reverse=False)
li = [2,3,5,6,1,4,8]
li.sort(reverse=False)
print(li)
# [1, 2, 3, 4, 5, 6, 8]
li.sort(reverse=True)
print(li)
# [8, 6, 5, 4, 3, 2, 1]
复制
- copy()
复制一个列表
name_list = ['张三', '李四', '王五','赵六']
name_li2 = name_list.copy()
print(name_li2)
# ['张三', '李四', '王五','赵六']
列表的循环遍历
依次打印列表中的各个数据
for循环
name_list = ['张三', '李四', '王五','赵六']
for i in name_list:
print(i)
while循环
i = 0
name_list = ['Tom', 'Lily', 'Rose']
while i < len(name_list):
print(name_list[i])
i += 1
列表的嵌套
所谓列表嵌套指的就是⼀个列表⾥⾯包含了其他的⼦列表
# 找到篮球
name_list = [['张三', '李四', '阿坤'], ['唱', '跳', '篮球'], ['甲', '乙', '丙']]
# 第⼀步:按下标查找到篮球所在的列表
print(name_list[1])
# 第⼆步:从李四所在的列表⾥⾯,再按下标找到数据李四
print(name_list[1][2])
元组
思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做?
定义元组
定义元组使⽤⼩括号,且逗号隔开各个数据,数据可以是不同的数据类型。
# 多个数据元组
t1 = (10, 20, 30)
# 单个数据元组
t2 = (10,)
注意:如果定义的元组只有⼀个数据,那么这个数据后⾯也好添加逗号,否则数据类型为唯⼀的这个数据的数据类型
元组的常⻅操作
元组数据不⽀持修改,只⽀持查找,具体如下
- 根据下标查找
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1[0])
- index():
查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index⽅法相同。
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.index('aa'))
- count():
统计某个数据在当前元组出现的次数。
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.count('bb'))
- len():
统计元组中数据的个数。
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(len(tuple1))
元组内的直接数据如果修改则⽴即报错
但是如果元组⾥⾯有列表,修改列表⾥⾯的数据则是⽀持的。
tuple2 = (10, 20, ['aa', 'bb', 'cc'], 50, 30)
print(tuple2[2]) # 访问到列表
# ['aa', 'bb', 'cc']
tuple2[2][0] = 'aaaaa'
print(tuple2)
# (10, 20, ['aaaaa', 'bb', 'cc'], 50, 30)