python-列表容器


#字符串容器中只能存储字符类型并且其中的元素不能修改。若需要存储的数据不是字符,且需要频繁修改,可以使用列表容器类型
#列表中存储的元素可以是多种数据类型,并且列表支持插入(尾部/指定位置)、删除(尾部/指定位置)元素操作
#对于列表而言,尾部插入/删除效率较高,不需要进行其他元素的位置移动
#列表也是序列式容器,支持下标和切片语法
#列表中的每一个元素都是列表类型
#列表的缺点:在指定位置插入/删除元素,会造成数据元素的移动,效率较低
#           根据关键字查找数据的话,效率低;
# 列表的优点:根据位置/索引去查找元素效率很高
#            尾部插入/删除元素效率较高

#创建一个空列表
my_list=[]
#创建一个带有数字类型的元素的列表
my_list=[10,20,30,40,60]
#创建一个带有字符串类型的元素的列表
my_list=['aaa','www','整个中国']
#列表中可以再放另外一个列表
my_list=[[1,2,3],['aaa','www','整个中国'],[4,5,6]]
#列表中可以存放不同类型元素
my_list=['aaa',60,24.45,[39,45,'bbb'],[2.244,'ophg']]

#建议列表中存放相同数据类型:方便后续对元素进行处理与计算

'''列表中常见操作------------------------------------------------------------------------'''
'''1、列表遍历----------------------------------------------'''
#while循环遍历
my_list=[1,2,3,4,5,6]
i=0
while i<len(my_list):
    print(my_list[i],end='')
    i+=1
#for循环遍历
for val in my_list:  #或者:for val in [1,2,3,4,5,6]:
    print(val,end='')
'''break\continue也可以用于for循环'''
#遍历嵌套式列表:先打印出所有 列表类型元素,再将这些 列表类型元素 里的 元素 打印出来
#while循环嵌套实现
my_list=[[1,2,3],['aaa','www','整个中国'],[4,5,6]]
a=0
while a<len(my_list):
    b=0                      #b为列表元素中的元素的索引
    while b<len(my_list[a]): #my_list[a]返回结果为:[1,2,3],['aaa','www','整个中国'],[4,5,6]
        print(my_list[a][b] ,end='') #打印出列表元素中的所有元素:123aaawww整个中国456
        b += 1
    a += 1
#for循环嵌套实现
my_list=[[1,2,3],['aaa','www','整个中国'],[4,5,6]]
for a in my_list:  #结果为:[1, 2, 3]['aaa', 'www', '整个中国'][4, 5, 6]
    for b in a:
        print(b, end='') #123aaawww整个中国456

'''2、列表元素的插入-----列表.insert(插入位置索引,插入的元素)------------------------------------'''
#创建空列表
my_list=[]
my_list.append(10) #在尾部添加列表元素:append只能有一个值
my_list.append(20)
my_list.append(30)
print(my_list)  #结果为:[10, 20, 30]
#在指定位置插入:列表.insert(插入位置索引,插入的元素)
my_list.insert(2,['插入值']) #结果为:[10, 20, ['插入值'], 30]
print(my_list)

'''3、列表元素的删除------位置删除:列表.pop(索引)---值删除:remove(值)---清空:clear-----------------------------------------'''
'''位置删除:列表.pop()'''#若不指定位置,则默认删除最后一个位置的元素
my_list=[]
my_list.append(10) #在尾部添加列表元素
my_list.append(20)
my_list.append(30)
print(my_list)  #结果为:[10, 20, 30]
my_list.pop() #删除最后一个元素,结果为:[10, 20]
print(my_list)
my_list.pop(1) #删除索引为1的值,结果为:[10]  【因为上面删除了30,这里又删除了20,所以只剩10了】
print(my_list)

'''值删除:列表.remove()'''
my_list=[]
my_list.append(10) #在尾部添加列表元素
my_list.append(350)
my_list.append(40)
my_list.append(40)
print(my_list)  #结果为:[10, 350, 40,40]
#remove默认删除第一次出现的值,不会删除所有相同的值
my_list.remove(40)
print(my_list) #结果为:[10, 350,40]

'''列表清空:清空列表所有元素'''
my_list.clear()

'''3、列表元素的排序-sort-----------------------------------------------------------'''
#创建一个包含10个随机数的列表
import random
my_list=[]
i=0
while i <10:
    #产生随机数
    random_number=random.randint(1,100)
    #将随机数插入到列表中
    my_list.append(random_number)
    i += 1
print(my_list) #结果显示创建了一个1-100的10个随机数的列表
#对列表中的元素进行排序
my_list.sort() #默认参数值为false,升序:sort(false)
print(my_list)
my_list.sort(reverse=True)#使用reverse(形参)改变默认参数为true(实参),实现降序
print(my_list)

'''4、列表元素的逆序-reverse()函数-----------------------------------------------------------'''
my_list.reverse() #将原来列表元素的顺序反转过来排列(不管是有序还是无序,仅仅反转元素的排列位置)

'''5、列表元素的查找-index----------------------------------------------------------'''
my_list=[10,20,30,40,50]
#根据值查询:查找元素的索引,
pos=my_list.index(30) # 返回值为:2
print(pos)
#若查询失败,则报错,程序终止。因此在查询前先判断元素是否在列表中
pos=my_list.index(3) #报错,提示:ValueError: 3 is not in list

#设置值的判断,并查找出30的位置,修改值为200
my_list=[10,20,30,40,50]
old_val=30
new_val=14
if  old_val in my_list:
    #查找到值为val的索引位置
    pos = my_list.index(old_val)
    #根据索引位置修改该值
    my_list[pos]=new_val
    print(my_list)   #结果为[10, 20, 14, 40, 50]
else:
    print('%s不存在'%old_val)

'''4、合并两个列表的元素:追加到另一个列表的尾部-extend----------------------------------------------------------'''
#extend将一个列表中的所有元素,追加到当前列表的尾部
my_list1=[10,20,40,50]
my_list2=['aaa','bbb','bvvv']
#将 my_list2 的所有元素追加到 my_list1 的尾部
my_list1.extend(my_list2)
print(my_list1) #结果为:[10, 20, 40, 50, 'aaa', 'bbb', 'bvvv']



'''列表练习案例【教师分配办公室】----------------------------------------------------------------------'''
#一个学校,有3个办公室,现在有8个(或者n个)老师等待工位的分配,请编写程序,完成随机分配
#解析:遍历每个老师,对应产生一个随机的办公室编号(索引):random.randint(0,2)

#1、定义学校和办公室列表:学校列表中有三个办公室列表
school=[[],[],[]] #此处为最终展示结果,里面需要有随机分配的老师号

#2、定义列表,保存8个(或者n个)老师:每个老师进行遍历,再分配随机数
  #因为有规律,可以用循环,不必用append添加8次
  #在此程序中,把老师创建出是一个独立的模块,可以定义成一个函数,后续可以直接调用
def create_teachers():
    """创建老师列表"""
    teacher_list=[]#定义列表保存老师【局部变量】
    a=1
    while a<=8:
        #创建老师的名字
        teacher_name='老师' + str(a) #字符串和数值不能直接拼接,需要将数值转换成字符串
        #把老师名字的值添加到列表中
        teacher_list.append(teacher_name)
        a += 1
    return teacher_list  #函数体执行完后的列表,返回列表结果到函数中

teachers=create_teachers() #调用函数返回值保存到teachers变量
print(teachers) #打印查看结果:['老师1', '老师2', '老师3', '老师4', '老师5', '老师6', '老师7', '老师8']

#3、分配老师列表到办公室中
import random
for teacher in teachers: #遍历老师:每次取出一个老师
    #产生一个办公室随机数:办公室索引为0 1 2
    office=random.randint(0,2)
    #把每个遍历的老师随机分配办公室
    school[office].append(teacher)
#查看各办公室的老师
for office in school:#查看每个办公室,结果为:显示每个办公室,显示的办公室【列表】[老师1,老师2][老师5][]...
    for person in office:
        print (person,end=' ')#查看每个办公室的每个人,显示的是各个办公室的老师【元素,不是列表】:老师1 老师3 老师4 老师6 老师7 老师5 老师2 老师8
    print() #因为显示在一行,看不出来,加一个空的print()进行换行显示
#最终结果为:【随机三行】
#老师1 老师3 老师4
#老师6 老师7
#老师2 老师5 老师8


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值