今日内容大纲
1. 什么是列表
定义: 能装对象的对象
在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求
列表存在索引和切片. 和字符串是一样的.
2. 相关的增删改查操作(重点)
添加:
1. append() 追加
2. insert(位置, 元素) 插入指定元素到指定位置
删除:
1. pop(index) 根据索引删除
2. remove(元素) 根据元素删除
修改:
索引修改
lst[索引] = 元素
查询:
for循环.
3. 列表的嵌套
多个列表互相嵌套
4. 列表的其他操作
1. count() 计数
2. sort() 排序 reverse = True
3. reverse() 翻转
4. len() 求长度
5. 什么是元组
能装对象的对象. 不可变数据类型. 一旦确认好. 不可更改
只读列表
可以迭代
6. 元组的嵌套
和列表一样.都可以互相嵌套.
元组的不可变: 指向不变
7. range(重点, 难点)
只要会数数就行
range(n) [0, n)
range(m,n) [m, n)
range(m,n,p) [m,n) 每隔p取一个
8.# 重点
for i in range(len(lst)):
i 索引
lst[i] 元素
DAY4 -基础数据类型之(list,tuple)
本节主要内容:
1.列表
2.列表的增删改查
3.列表的嵌套
4.元组和元组的嵌套
5.range
一.列表
1.1 列表的介绍
列表是python的基础数据类型之⼀ ,其他编程语言也有类似的数据类型. 比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型:
列表相比于字符串. 不仅可以存放不同的数据类型. 而且可以存放⼤量的数据. 32位 python可以存放: 536870912个元素, 64位可以存放: 1152921504606846975个元素.⽽且列 表是有序的(按照你保存的顺序),有索引, 可以切片方便取值.
2.2 列表的索引和切片
列表和字符串⼀样也拥有索引:
列表的切片:
⼆. 列表的增删改查
1. 增, 注意, list和str是不⼀样的. lst可以发生改变. 所以直接就在原来的对象上进行了操作
2. 删除 pop, remove, clear, del
3. 修改 索引切片修改
4. 查询, 列表是⼀个可迭代对象, 所以可以进⾏for循环
5. 其他操作
三. 列表的嵌套
采用降维操作,⼀层⼀层的看就好,就没有问题
四. 元组和元组嵌套 元组: 俗称不可变的列表.又被成为只读列表, 元组也是python的基本数据类型之⼀, 用小括号括起来, 里面可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. 但就是不能 改.
关于不可变, 注意: 这里元组的不可变的意思是子元素不可变,而子元素内部的子元素是可 以变, 这取决于子元素是否是可变对象. 元组中如果只有⼀个元素. ⼀定要添加⼀个逗号, 否则就不是元组
元组也有count(), index(), len()等⽅法. 可以自己测试使用
五. range range可以帮我们获取到⼀组数据. 通过for循环能够获取到这些数据.
今日作业:
1.写代码,有如下列表,按照要求实现每⼀个功能
# li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] # 1)计算列表的⻓度并输出 '''''' ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] print(len(li)) ''' # 2)列表中追加元素"seven",并输出添加后的列表 ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] li.append('seven') #这部分不可以直接写在append里边 print(li) ''' # 3)请在列表的第1个位置插⼊元素"Tony",并输出添加后的列表 '''#两种理解方式 li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] li.insert(1,'Tony') #这部分不可以直接写在append里边 print(li) li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] li.insert(0,'Tony') print(li) ''' # 4)请修改列表第2个位置的元素为"Kelly",并输出修改后的列表 ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] li[1]='Kelly' print(li) ''' # 5)请将列表l2=[1,"a",3,4,"heart"]的每⼀个元素添加到列表li中,⼀⾏代码实 # 现,不允许循环添加。 ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] l2=[1,"a",3,4,"heart"] li.extend(l2) print(li) ''' # 6)请将字符串s = "qwert"的每⼀个元素添加到列表li中,⼀⾏代码实现,不 # 允许循环添加。 ''' #重点复习,从最大值索引加1开始切片 li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] s="qwert" li[5:]=s print(li) ''' ''' # 7)请删除列表中的元素"eric",并输出添加后的列表 #这是错题不做 ''' # 8)请删除列表中的第2个元素,并输出删除的元素和删除元素后的列表 ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] del li[1] print(li) ''' ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] li.pop(1) print(li) ''' ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] li.remove('WuSir') print(li) ''' # 9)请删除列表中的第2⾄4个元素,并输出删除元素后的列表 ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] del li[1:4] print(li) ''' # 10)请将列表所有得元素反转,并输出反转后的列表 ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] li.reverse() print(li) ''' # 11)请计算出"alex"元素在列表li中出现的次数,并输出该次数。 ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] s=li.count('alex') print(s) '''
3,写代码,有如下列表,按照要求实现每⼀个功能。
# lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] # 1)将列表lis中的"tt"变成⼤写(⽤两种⽅式)。 ''' 方法一: lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] lis[3][2][1][0]='TT' print(lis) ''' ''' #方法二: lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] lis[3][2][1][0]=lis[3][2][1][0].upper() print(lis) ''' # 2)将列表中的数字3变成字符串"100"(⽤两种⽅式)。 '''#列表中有两个三,在这里我只实现一个3,做下实验 # 方法一: lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] lis[3][2][1][1]='100' print(lis) ''' ''' #方法二: lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] lis[3][2][1][1]=str(lis[3][2][1][1]+97) print(lis) ''' # 3)将列表中的字符串"1"变成数字101(⽤两种⽅式)。 '''
#方法一 lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] lis[3][2][1][2]=int(lis[3][2][1][2])+100 print(lis) ''' """ #方法二: lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] lis[3][2][1][2]=101 print(lis) """
4.请⽤代码实现:
# li = ["alex", "eric", "rain"] # 利⽤下划线将列表的每⼀个元素拼接成字符串"alex_eric_rain" '''#重点记忆 li = ["alex", "eric", "rain"] s='' for i in li: s+=i+'_' s=s.rstrip('_') print(s) ''' ''' li = ["alex", "eric", "rain"] li='_'.join(li) print(li) ''' '''#while方法实现 li = ["alex", "eric", "rain"] count = 0 ll = "" while count <= len(li) -1: ll =ll + (li[count])+"_" count += 1 print(ll.strip("_")) ''' ''' li = ["alex", "eric", "rain"] count = 0 ll = "" while count <= len(li): ll =ll + (li[count])+"_" count += 1 print(ll.strip("_")) '''
5.利⽤for循环和range打印出下⾯列表的索引。
# li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] ''' li = ["alex", "WuSir", "ritian", "barry", "wenzhou"] for i in range(len(li)): print(i,li[i]) '''
6.利⽤for循环和range找出100以内所有的偶数并将这些偶数插⼊到⼀个新列表中。
l=[] for i in range(101): if i%2==0: l.append(i) print(l)
7.利⽤for循环和range 找出50以内能被3整除的数,并将这些数插⼊到⼀个新列表中
l7=[] for i in range(51): if i%3==0: l7.append(i) print(l7)
8.利⽤for循环和range从100~1,倒序打印。
'''#正序打印1-100 for i in range(1,101): print(i) ''' ''' #倒叙打印100-1//重点记忆// for i in range(100,0,-1): print(i) '''
9.利⽤for循环和range从100~10,倒序将所有的偶数添加到⼀个新列表中,然后对列表的元素进⾏筛选,将能被4整除的数留下来。
l=[] k=[] for i in range(100,9,-2): l.append(i) print(l) for s in l: if s%4==0: k.append(s) print(k)
10.利⽤for循环和range,将1-30的数字⼀次添加到⼀个列表中,并循环这个列表,将能被3整除的数改成*。
'''#重点记忆这道题,尤其是后半部分 l1=[] for i in range(1,31): l1.append(i) print(l1) k=0 for s in l1: if s%3==0: l1[k]="*" k+=1 print(l1) '''
11,查找列表li中的元素,移除每个元素的空格,并找出以"A"或者"a"开头,并
以"c"结尾的所有元素,并添加到⼀个新列表中,最后循环打印这个新列表。
li = ["TaiBai ", “ale xC", “AbC ", "egon", " ri TiAn", "WuSir", " aqc"]
''' #重点记忆:前半部分,怎么去掉空格的,深入了解方法 lk=[] s=0 li = ["TaiBai ", "ale xC", "AbC ", "egon", " ri TiAn", "WuSir", " aqc"] while s<len(li): li[s]=li[s].replace(" ",'') s+=1 print(li) for i in li: if (i.startswith('A') or i.startswith('a'))and i.endswith('c'): lk.append(i) print(lk) '''
12,开发敏感词语过滤程序,提示⽤户输⼊评论内容,如果⽤户输⼊的内容中
包含特殊的字符:
敏感词列表 li = ["苍⽼师", "东京热", "武藤兰", "波多野结⾐"]
则将⽤户输⼊的内容中的敏感词汇替换成等⻓度的*(苍⽼师就替换***),并添
加到⼀个列表中;如果⽤户输⼊的内容没有敏感词汇,则直接添加到上述的列
表中。
''' #重点记忆,没做出来 #字符串操作,利用列表的遍历作为条件,进行字符串的操作replace l=[] li = ["苍老师", "东京热", "武藤兰", "波多野结衣"] s=input('请输入评论内容:') for i in li: s=s.replace(i,len(i)*'*') l.append(s) print(l) ''' ''' l=[] li = ["苍老师", "东京热", "武藤兰", "波多野结衣"] while 1: s=input('请输入评论内容:') if s.upper()=='Q': break for i in li: s=s.replace(i,len(i)*'*') l.append(s) print(l) '''
13,有如下列表
li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn"]
循环打印列表中的每个元素,遇到列表则再循环打印出它⾥⾯的元素。
我想要的结果是:
1
3
4
alex
3
7,
8
taibai
5
ritian
''' 重点复习:没有思路,做这个题目 #用==,而不是is #先判断列表 #打印出来的结果没有引号 li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn"] for i in li: if type(i)==list: for ii in i: if type(ii) is str: print(ii.lower()) else: print(ii) else: if type(i)==str: print(i.lower()) else: print(i) '''
14. 把班级学⽣数学考试成绩录⼊到⼀个列表中: 并求平均值. 要求: 录⼊的时候
要带着⼈名录⼊, 例如: 张三_44
'''#这道题目没做出来//第一版问题比较多 sum=0 l=[] while 1: k=input('按Q退出,其他键继续录入成绩:').upper() if k=='Q': break s=input('请输入名字和成绩例如,张三_44:') l.append(s) print(l) avg=input('按1求平均值,其他键退出:') if avg==1: for i in l: a,b=i.split('_') sum+=int(b) print('平均值是:',sum/len(l)) ''' '''#参考高手版本 #思路整理:两个input合成1句话写 #sum在下边用,直接写在下边 #不用判断输入什么,只要第一个input有,输入Q,就直接退出 l=[] while 1: k=input('按Q退出,或者请输入学生的姓名和成绩(姓名_成绩):').upper() if k=='Q': break l.append(k) print(l) #在这里可以清晰看到输入的哪些姓名_成绩 sum=0 for i in l: a,b=i.split('_') #这里用到了解包 sum+=int(b) print('平均值是:',sum/len(l)) ''' '''#高手版本 lst = [] while 1: s = input("请输入学生的姓名和成绩(姓名_成绩),输入Q退出:") if s.upper() == "Q": break lst.append(s) sum = 0 for i in lst: a = i.split("_") sum += int(a[1]) print(sum / len(lst)) '''
15. 敲七游戏. 从0开始数数. 遇到7或者7的倍数要在桌上敲⼀下. 编程来完成敲七
'''#第一版 s=int(input('请输入数字:')) cou=0 l=[] for i in range(1,s+1): l.append(i) for i in l: if i%7==0: l[cou]='咣' cou+=1 print(l) ''' ''' #第二版 #思路:1.输入数字,定义索引常量0,定义空列表 # 2.用for,把输入数字的1到数字,添加到列表中 # 3.用for遍历,判断是不是7的倍数,或者数字里含有7 # 4.对这些数字进行修改 #5.打印 s=int(input('请输入数字:')) cou=0 l=[] for i in range(1,s+1): l.append(i) for i in l: if i%7==0 or '7' in str(i): l[cou]='咣' cou+=1 print(l) ''' '''#第三版:高手优化版本 #思路:1.创建空列表,输入任意数字 2.用for和range,创建1串数字 3.在for循环中,用if判断是不是7的倍数或者含有数字7, 4.通过用空列表,进行添加 5.最后打印列表 #利用列表进行添加: l = [] n = int(input("输入任意数:")) for i in range(1,n+1): if i % 7 == 0 or "7" in str(i) : l.append("咚") else: l.append(i) print(l) '''
16.(升级题) 编写程序. 完成⼼动⼥⽣的筛选. (升级题)
⾸先. 程序会提示⽤户录⼊10位⼼仪⼥⽣的姓名. 然后把10位⼥⽣的名
字和序号展示出来. 由⽤户选择⼼动⼥⽣. 此时⽤户可以选择3个⼼动⼥⽣. 把⽤
户选中的三个⼼动⼥⽣的名字打印出来. 供⽤户继续选择. 这⼀次选择. 只能选
择⼀名⼥⽣. 然后输出⽤户的⼼动⼥⽣是xxx
运⾏效果
多练习这个版本,复习
count=0 l=[] while count<5: shu=input('请输入您心仪的女生(您还可以输入%s个):'%(5-count)) l.append(shu) count+=1 print('您当前的心仪女生有:') a=0 for i in range(len(l)): #这个地方要注意 print(f'编号:{a+1},名字:{l[a]}') a+=1 print("请输入你更喜欢的三位女生的编号") b=0 b1=[] while b<3: b += 1 better_love=input(f"请输入第{b}个美眉的编号:") b1.append(better_love) c=0 for i in range(len(b1)): print(f'编号:{c+1},名字:{b1[c]}') c+=1 print('最后三选一') d=int(input('请输入你最喜欢的人的编号:')) print(f'程序帮你选出来了,你最喜欢的是{b1[d-1]}妹子') '''1版 # count = 5 # l = [] # while count > 0: # s = input("请输入你心仪的女生(你还可以输入%s次);" % (count)) # l.append(s) # count -= 1 # print("你当前心仪的女生有:") # # a = 1 # for el in l: # print("编号: %s,名字: %s" % (a,el)) # a += 1 # print("请输入你更喜欢的三个女人的编号:") # # b = 1 # l1 = [] # while b <= 3: # s2 = input("请输入第%s个美眉的编号;" % (b)) # l1.append(l[int(s2)-1]) # b += 1 # print("更喜欢的新鲜出炉;") # # a1 = 1 # l2 = [] # for el1 in l1: # print("编号: %s,名字: %s" % (a1,el1)) # a1 += 1 # print("最后了,三选一:") # s3 = input("输入你最喜欢的人的编号:") # l2.append(l1[int(s3)-1]) # print("程序帮你选出来了,你喜欢的是%s妹子." % (l2[0])) ''' #2版 # lst = [] # lst2 = [] # count = 0 # count2 = 0 # while count < 10: # xindong = input(f"请输入你的心动女生(你还可以输入{10 - count}个:)") # lst.append(xindong) # count += 1 # print('您当前的心仪女生有:') # for i in range(len(lst)): # print(f"编号:{i + 1}, 名字:{lst[i]}") # print('请输入你更喜欢的三个女生的编号') # while count2 < 3: # xindong2 = int(input(f"请输入第{1 + count2}个美眉的编号:")) # lst2.append(lst[xindong2 - 1]) # count2 += 1 # print('更喜欢的新鲜出炉') # for i in range(len(lst2)): # print(f"编号:{i + 1}, 名字:{lst2[i]}") # print('最后三选一') # xindong3 = int(input("请输入你喜欢的人的编号")) # print(f"程序帮你选出来了,你最喜欢的妹子是{lst2[xindong3 - 1]}")