巨蟒python全栈开发-第4天 列表&元组&range

时间:2021-02-24 19:50:33

今日内容大纲
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]}")