列表 - list
列表的应用场景
列表可以一次性存储多个数据
列表的格式
[数据1,数据2,数据3,数据4……]
列表可以一次性存储多个数据,而且可以是不同的数据类型
==但一般情况下,一个列表只存储一个类型的数据==
列表的常用操作
别表的常用操作就是:增、删、改、查
查找
列表-下标
与字符串下标一样,从 0 开始
实例1:
# 列表下标
namelist =['tom','lily','rose']
print(namelist[0]) # tom
print(namelist[1]) # lily
print(namelist[2]) # rose
列表-查找
利用三个函数:index() count() len()
==index()== 返回指定数据的下标
语法:
列表.index(数据,开始位置下标,结束位置下标)
# 开始位置和结束位置下标默认不写,代表查找整个列表
注意:如果查找的数据不存在则报错
实例1:
# 列表查找函数-index()
namelist =['tom','lily','rose']
print(namelist.index('lily',0,2)) # 1
print(namelist.index('lily')) # 1
==count()== 返回指定数据在列表中出现的次数
语法:
列表.count(数据)
注意:如果查找的数据不存在则返回 0
实例1:
# 列表查找函数-count()
namelist =['tom','lily','rose']
print(namelist.count('lily')) # 1
==len()== 返回列表中数据的个数
语法:
len(列表)
实例1:
# 列表查找函数-len()
namelist =['tom','lily','rose']
print(len(namelist)) # 3
判断是否存在
- in: 判断指定的数据在某个列表里存在,如果在返回True,否则返回false
实例1:
# 判断是否存在-in
namelist =['tom','lily','rose']
print('lily' in namelist) # True
print('lilys' in namelist) # False
- not in : 判断指定数据不在某个列表里,如果不在返回True,否则返回false
实例2:
# 体验案例:判断客户输入的名字是否重复
namelist =['tom','lily','rose']
name = input('请输入你的名字:')
if name in namelist:
print(f'你输入的名字是{name},重复了,请换一个')
else:
print(f'你输入的名字是{name},没有重复,可以注册')
列表-增加数据
作用:增加指定的数据到列表中
- ==append()==:列表结尾追加一个数据,如追加的数据是一个序列,则追加整个序列到列表
语法:
列表.append(数据)
实例1:
# 体验增加数据 - append()
namelist =['tom','lily','rose']
namelist.append('Sean')
print(namelist) # ['tom', 'lily', 'rose', 'Sean']
namelist.append(['ugly','Jean'])
print(namelist) # ['tom', 'lily', 'rose', 'Sean', ['ugly', 'Jean']]
注意:
- 1.列表是一个可变数据类型,
- 2.如追加的数据是一个序列,则追加整个序列到列表
- 3.append()函数的参数只有一个,也就是只能加单个数据或则一个序列(str,list,tuple,set)
- ==extend()== :列表结尾追加数据,如果追加的是一个序列,则将这个序列的元素,逐个增加到列表
语法:
列表.extend(数据)
实例1:
# 体验增加数据 - extend()
namelist =['tom','lily','rose']
namelist.extend('Sean')
print(namelist) # ['tom', 'lily', 'rose', 'S', 'e', 'a', 'n']
namelist =['tom','lily','rose']
namelist.extend(['Sean'])
print(namelist) # ['tom', 'lily', 'rose', 'Sean']
- ==insert()== :指定位置,新增数据
语法:
列表.insert(位置下标,数据)
实例1:
# 体验增加数据 - insert()
namelist =['tom','lily','rose']
namelist.insert(1,'Sean')
print(namelist) # ['tom', 'Sean', 'lily', 'rose']
列表-删除数据
==del==
语法:
del 目标
实例1:删除列表
# 删除列表数据-del-删除列表
namelist =['tom','lily','rose']
del namelist
print(namelist) # 结果报错:name 'namelist' is not defined
实例2:删除指定数据
# 删除列表数据-del-删除指定数据
namelist =['tom','lily','rose']
del namelist[0]
print(namelist) # ['lily', 'rose']
==pop()== 删除指定下标的数据(默认为最后一个),并返回该数据
语法:
列表.pop(下标)
实例1:
# 删除列表数据-pop()-删除指定数据
namelist =['tom','lily','rose']
print(namelist.pop(0)) # 结果:tom
print(namelist) # 结果:['lily', 'rose']
namelist =['tom','lily','rose']
print(namelist.pop()) # 结果:rose
print(namelist) # 结果:['tom', 'lily']
==remove()== 删除列表中某个数据的==第一个匹配项==
语法:
列表.remove(数据)
实例1:
# 删除列表数据-remove()
namelist =['tom','lily','rose','rose']
namelist.remove('rose')
print(namelist) # 结果:['tom', 'lily', 'rose']
==clear()== 清空列表 返回一个空值
实例1:
# 删除列表数据-clear() 返回一个空值
namelist =['tom','lily','rose']
print(namelist.clear()) # 结果是None
列表-数据修改
==直接修改==对应下标的数据,实际是重新赋值
实例1:
# 修改列表数据-直接修改,重新赋值
namelist =['tom','lily','rose']
namelist[0] = 'Sean'
print(namelist) # 结果:['Sean', 'lily', 'rose']
==reverse()== 逆置列表
实例1:
# 修改列表数据-reverse() 逆置
numlist = [1,3,4,5,7,8,9]
numlist.reverse()
print(numlist) # 结果:[9, 8, 7, 5, 4, 3, 1]
==sort()== 排序
语法:
列表.sort(key=None,reverse=False) # key是要到字典等有键值的地方才用,现在可以忽略
注意:reverse表示排序规则,reverse=True 降序,reverse=False 升序(默认,可以不写)
实例1:
# 修改列表数据-sort() 排序
numlist = [1,5,2,3,6,8,7]
numlist.sort() # 默认升序
print(numlist) # 结果:[1, 2, 3, 5, 6, 7, 8]
numlist = [1,5,2,3,6,8,7]
numlist.sort(reverse=True) # 降序排列
print(numlist) # 结果:[8, 7, 6, 5, 3, 2, 1]
复制列表
==copy()==
实例1:
# 列表复制-copy()
namelist =['tom','lily','rose']
name_list = namelist.copy()
print(name_list) # 结果:['tom', 'lily', 'rose']
列表的循环遍历
while
实例1:
# 列表的循环遍历 -while
namelist =['tom','lily','rose']
i=0
while i< len(namelist):
print(namelist[i], end=' ')
i+=1
for
实例1:
# 列表的循环遍历 -for
namelist =['tom','lily','rose']
for str1 in namelist:
print(str1, end=' ')
# 使用range()方法
for j in range(0, len(namelist)):
print(namelist[j], end=' ')
numlist = [1,5,2,3,6,8,7]
for i in numlist:
print(i,end=' ')
# 结果: tom lily rose 1 5 2 3 6 8 7
列表嵌套
- 列表嵌套就是一个列表里包含了其他子列表
实例1:
# 列表嵌套
name_list=[['小明','小红','小绿'],['tom','lily','rose'],['张三','李四','王五']]
print(name_list[2]) # 结果:['张三', '李四', '王五']
print(name_list[2][1]) # 结果:李四
列表嵌套综合应用——随机分配办公室
实例1:
# 列表嵌套综合应用——随机分配办公室
import random
tech=['Sean','Tom','Rose','Liya','Bob','Jack','Luke','May']
# 定义教师名单
offices = [[],[],[]]
# 定义办公室列表
# 现在把教师随机放进三个办公室里
for name in tech:
num = random.randint(0,2)
# 随机产生办公室列表的下标-- 0,1,2
offices[num].append(name)
# 把教师分配进办公室
# 打印出办公室分配的情况
i = 1
# 办公室房号的计数器
for office in offices:
print(f'办公室{i}的人数是{len(office)},里面的老师是:{office}')
i+=1
内置高阶函数 操作列表
- ==map()==
map(func,list),两个参数,一个是个函数func,另一个是一个list列表,将list中的每个元素作为func的参数,返回值作为列表元素,生成一个新的列表
实例1:
# 计算列表中各元素的平方,并生成新的列表
def func(x):
return x**2
list1=[1,3,5,8]
result= map(func,list1)
print(result) # <map object at 0x00000000027F2A90>
print(list(result)) # [1, 9, 25, 64]
- ==reduce()==
reduce(func,list),其中func必须有两个参数,每次func计算的结果继续和列表的下一个元素做累积计算,==累积可以是累加,累减,累乘等==
注意:reduce()传入的参数func必须接受2个参数
实例1:
# 累加计算
import functools
def func(a,b):
return a+b
list1=[1,3,5,8]
result=functools.reduce(func,list1)
print(result) # 17
- ==filter()==
filter(func,list)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象,并用list()转换为列表
实例1:
# 用列表中的偶数组成一个新列表
list1=[1,2,5,6,7,8,11,10]
def func(x):
if x%2==0:
return x
result = filter(func,list1)
print(result) # <filter object at 0x0000000001E72B70>
print(list(result)) # [2, 6, 8, 10]
元组 - tuple
什么是元组:
元组与列表类似,也能存储多个数据,列表内的数据可以修改,元组内的数据是==不能修改==的
定义元组
定义元组用小括号,且逗号隔开各个数据,数据可以是不同数据类型的数据,但一般不这样做
[图片上传失败...(image-4d7242-1593051315240)]
元组的常见操作
元组数据不支持修改,只支持查找
元组的查找
- 按下标查找数据
tuple1 = ('aa','bb','cc')
print(tuple[0]) # aa
==index()== :查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表,字符串的index()方法相同
实例1:
tuple1 = ('aa','bb','cc')
print(tuple1.index('aa') # 0
==count()== :统计某个数据在当前元组出现的次数
实例1:
tuple1=('aa','bb','cc','bb')
print(tuple1.count('bb')) # 2
==len()== :统计元组中数据的个数
实例1:
tuple1 = ('aa','bb','cc','bb')
print(len(tuple1)) # 4