目录
目录
小结:
列表:
字符串中的元素不能够修改,而且元素类型单一,而列表中的元素可以修改,并且可以存放多种类型的元素.
存储的元素可以是多种数据类型,甚至存储的数据类型都不一样,并且列表支持对元素的修改、删除等操作,列表也是一个序列式容器,支持索引和切片语法.
- 列表,lisi,使用[];
- 列表可以存放任意多个数据;
- 列表中可以存放任意类型的数据;
- 列表中数据之间使用逗号隔开
#方式1,使用类实例化的方式
#1.1 定义空列表 变量=list()
list1 = list()
print(type(list1), list1) #<class 'list'> []
#1.2 定义非空列表,也称为类型转换 list(可迭代类型) 可迭代类型,能够使用for循环就是可迭代类型(比如 容器)
#将容器中的每个数据都作为列表中一个数据进行保存
list2 = list('abcd')
print(list2) #['a', 'b', 'c', 'd']
#方式2,直接使用[]进行定义(使用较多)
#2.1 定义空列表
list3 = []
print(list3) #[]
#2.2 定义非空列表
list4 = [1,3.14,'hello',False]
print(list4) #[1, 3.14, 'hello', False]
#list列表
#创建一个空的列表
my_list = []
#创建一个带有数字类型的元素的列表
my_list = [10,20,30]
#创建一个带有字符串类型元素的列表
my_list = ['aaa','bbb','ccc']
#列表中可以再放另外一个列表
my_list = [[1,2,3],[4,5,6],[7,8,9]]
#列表中也可以同时存放不同类型的元素
my_list = ['Trump',69,2.23,[10,20,30]]
#建议列表中存放相同类型的数据,可以对数据应用统一的操作
列表支持下标和切片
列表的切片是得到新的列表;
字符串的切片得到是新的字符串
list4 = [1,3.14,'hello',False]
print(list4) #[1, 3.14, 'hello', False]
#获取列表中第一个数据
print(list4[0])
#获取列表中最后一个数据
print(list4[-1])
#获取中间两个数据
print(list4[1:3])
列表查询
- index()方法
index()这个方法的作用和字符串中的find()作用一样,列表中是没有find()方法的,只有index()方法。
字符串中同时存在find()和index()方法
index()
1.找到 返回下标
2.没有找到,直接报错- count()方法
列表.count(数据) #统计指定数据在列表中出现的次数
list1 = ['hello',2,3,2,3,4]
#查找2出现的下标
num = list1.index(2)
print(num)
#统计数据2出现的次数
num1 = list1.count(2)
print(num1)
#统计数据20出现的次数
num2 = list1.count(20)
print(num2)
列表遍历:
my_list = [10,20,30,40]
#列表是序列式容器,支持索引、切片
print(my_list[0],my_list[1])
#1.列表的遍历
index = 0
while index < len(my_list):
print(my_list[index])
index += 1
#2.for循环一般都用于容器中元素的遍历
for val in my_list:
print(val)
my_list = [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
使用while循环遍历
i = 0
while i < len(my_list):#大列表
j = 0
while j < len(my_list[i]):#小列表
print(my_list[i][j])
j += 1
i += 1
#使用for循环遍历
for o in my_list: #用o代替大列表
for v in o: #用v代替小列表
print(v)
列表优缺点:
列表支持:位置删除(尾部删除、指定位置删除)、值删除;指定位置插入元素、尾部位置插入元素.
对于列表而言,尾部插入效率高一些,不需要移动元素,指定位置插入效率低;位置删除在尾部删除时效率比较高,不需要移动元素.
- 优点:
- 根据索引查找元素效率高;
- 尾部插入和删除元素效率高.
- 缺点:
- 在指定位置插入和删除元素,会造成数据元素的移动,效率较低;
- 根据关键字区查找数据的话,效率比较低.
元素的插入和删除(insert和remove):
- 添加数据
列表.append(数据) #向列表的尾部添加数据
#返回:None,所以不用使用 变量 = 列表.append()
直接在原列表中添加数据,不会生成新的列表,如果想要查看添加后的数据,直接print()打印原列表。- 删除数据
列表.pop(index) #根据下标删除列表中的数据
index下标可以不写,默认删除最后一个
返回:删除的数据
#定义空列表
list1 = []
print(list1)
#添加数据
list1.append('zhangsan')
print(list1)
list1.append('lisi')
list1.append('wangwu')
print(list1)
#删除数据
list1.pop() #删除wangwu
print(list1)
num = list1.pop(1) #删除lisi
print('删除的名称为:',num)
print(list1)
#创建空列表
my_list = []
#append追加,在尾部插入元素
my_list.append(10)
my_list.append(20)
my_list.append(30)
print(my_list)
#insert在指定位置插入指定元素
my_list.insert(0,100) #在索引为0的位置插入的元素为100
print(my_list)
my_list.insert(2,100)
print(my_list)
#删除元素:值删除,位置删除
#pop方法:用于位置删除,默认删除最后一个元素位置,如果指定了位置,则删除该位置元素
my_list.pop()
print(my_list)
my_list.pop(0)
print(my_list)
#remove移除,根据值删除
my_list.remove(100)
print(my_list)
my_list.append(20)
print(my_list)
#remove删除第一出现的值
my_list.remove(20)
print(my_list)
#清空,删除
my_list.clear()
print('列表长度:',len(my_list))
修改数据:
想要修改列表中的数据,直接使用下标即可。列表[下标] = 新数据
列表的反转 reverse()
字符串 反转 字符串[::-1]
列表 反转
1.列表[::-1] 得到一个新的列表,原列表不会改动;
2.列表.reverse() 直接修改原列表的数据
my_list = ['a','b','c','d','e']
#1.切片
my_list1 = my_list[::-1]
print('my_list:',my_list)
print('my_list:',my_list1)
#2.reverse
my_list.reverse()
print('my_list:',my_list)
列表排序(sort):
#前提:列表中的数据要一样
列表.sort() # 升序,从小到大,直接在原列表中进行排序
列表.sort(resverse = True) #降序,从大到小,直接在原列表中进行排序
my_list = [1,5,9,7,3,2,4,8,6]
#排序,升序
my_list.sort()
print(my_list)
#排序,降序
my_list.sort(reverse=True)
print(my_list)
#创建一个包含10个随机数的列表
#1.先创建一个空列表
import random
my_list = []
#2.用循环产生10个随机数
i =0
while i < 10:
#产生(1,100)的随机数
random_number = random.randint(1,100)
#将随机数插入到列表中
my_list.append(random_number)
i += 1
print(my_list)
#对列表中的元素进行排序(sort排序)
#默认排序是从小到大,升序排列,sort的reverse默认值为false时,是从小到大排序
my_list.sort()
print(my_list)
#将sort函数的reverse默认值改成true实现从大到小排序
my_list.sort(reverse=True)
print(my_list)
#逆序
my_list.reverse()
print(my_list)
列表嵌套:
列表的嵌套就是指列表中数据都是列表
student_list = [['zhangsan','18','自动化测试'],['lisi','20','功能测试']]
#zhangsan
print(student_list[0][0])
#lisi
print(student_list[1][0])
#zhangsan的信息添加一个性别 男--> 向zhangsan所在的列表添加数据
student_list[0].append('男')
print(student_list) #[['zhangsan', '18', '自动化测试', '男'], ['lisi', '20', '功能测试']]
#删除性别
student_list[0].pop()
print(student_list) #[['zhangsan', '18', '自动化测试'], ['lisi', '20', '功能测试']]
#打印所有人员的年龄
for info in student_list: #info是列表
print(info[1]) #18 20
元素查找(index):
#查找元素
my_list = [10,20,30,40]
old_value = 10
new_value = 200
#index用于根据值查询,如果查询失败,则会报错
if old_value in my_list:
#查找到old_value的位置
pos = my_list.index(old_value)
#根据位置值修改
my_list[pos] = new_value
print(my_list)
my_list2 = ['aaa','bbb','ccc']
#将一个列表中的所有元素追加到当前列表的尾部
my_list.extend(my_list2)
print(my_list)
案例:
# 一个学校, 有3个办公室, 现在有 8 位老师等待工位的分配, 请编写程序, 完成随机的分配
# 1. 待分配的 8 位老师需要存储, 我们可以用列表来暂时存储 8 位老师.
# 2. 一个学校中包含了多个办公室, 学校可用列表来表示, 学校中又包含了多个办公室, 每个办公室里可能有多个老
# 师, 办公室仍然可用列表来表示.
# 3. 从待分配老师列表中取出数据, 随机产生办公室编号, 将该老师分配到该办公室.
# 4. 打印各个办公室中的老师列表
import random
#定义学校和办公室
school = [[],[],[]]
def create_teachers():
"""创建老师列表"""
#定义列表保存老师
teacher_list = []
index = 1
while index <= 8:
#创建老师的名字
teacher_name = '老师' + str(index)
#将创建好的老师的名字放进列表
teacher_list.append(teacher_name)
index += 1
return teacher_list
teachers_list = create_teachers()
# print(teachers_list)
#分配老师
for t in teachers_list:
#产生一个办公室编号的随机数
office_number = random.randint(0,2)
#给老师随机分配办公室
school[office_number].append(t)
#查看各个办公室的老师
for office in school:
for person in office:
print(person,end = ' ')
print()
小结:
函数 | 用法 |
insert | 在指定位置插入元素 |
append | 在尾部插入 |
pop | 删除尾部元素或者删除指定位置元素 |
remove | 删除指定值的元素 |
clear | 清空列表 |
sort | 对列表中的元素进行排序,默认升序(从小到大),需要指定reverse=True,可以实现降序排列 |
reverse | 对列表中的元素进行逆序 |
index | 根据值查找某个元素,并返回该元素在列表中的索引,如果查找失败,会报错,终止程序运行 |
extend | 将一个列表中的所有元素追加到当前列表的尾部 |