一、基础数据类型 列表(list)
1.初识列表
why:
字符串的缺点:
1,只能存储少量的数据。
2,s = '1True[1,2,3]' 无论索引,切片 获取的都是字符串类型,单一,转化成它原来的类型还需要再一步转换。
int(s[0])
what: python基础数据类型之一:list列表。
列表是以中括号组成,每个元素以逗号隔开的,容器型数据类型。
[1, '太白', [1,2,3],True, {'name': 'alex'}, (22,33)]
其它语言:js语言中叫数组。
列表是一个有序的可以存储大量的数据的数据类型。
how:
两个方面:1 列表的切片
2 列表的常用操作
where:
程序中如果需要你构建一个容器型数据并且是按照顺序存储的大量的数据,你要用到列表。
2.列表的索引和切片
(1)索引
例: l1 = ['太白', 100, 'alex', '日天', '武大', '吴老师', '景女神']
l1 = ['太白', 100, 'alex', '日天', '武大', '吴老师', '景女神'] ret = l1[0] ret1 = l1[1] print(ret1,type(ret1)) print(l1[-1]) print(l1[-2])
(2)切片 顾头不顾腚
print(l1[:4]) print(l1[:5:2]) 倒序取值 print(l1[-1:-4:-1])
3. 列表的常用操作
例: l1 = ['alex', '太白', '吴老师', '景女神', '武大']
增
(1)append 追加
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] l1.append('alex') print(l1) l1.append(100) print(l1) l1.append([1, 2, 3]) print(l1)
(2)insert 插入
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] l1.insert(1,'小潘') #前面1 代表位置,在索引为1 的位置
(3)extend 迭代着追加
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] l1.extend('alex') l1.extend(['肖锋', 666])
删
(1)pop 按照索引删除,会将删除的元素作为返回值返回
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] ret = l1.pop(0) print(ret) #被删除内容可以输出 print(l1)
(2)remove 按照元素删除
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] ret = l1.remove('武大') print(ret)
(3)clear 清空列表
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] l1.clear() print(l1)
(4)del 1,按照索引删除
2,按照切片(可以加步长)删除
3,删除整个列表
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] del l1[-2] print(l1) del l1[1:] print(l1) del l1[::2] print(l1)
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] del l1 print(l1) # 输出结果:(报错)原因: NameError: name 'l1' is not defined
改
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] l1[0] = '男神' print(l1)
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] l1[:3] = 'abc' print(l1) l1[:3] = 'abcdefghigk' print(l1)
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] l1[1:4:2] = 'a2' print(l1) #切片切除两个元素,必须有两个元素来替换
l1 = ['alex', '太白', '吴老师', '景女神', '武大'] l1[1:4:2] = 'a' print(l1) l1[1:4:2] = [1,2,3] print(l1) #都会报错
查
按照索引,按照切片(步长查询)
for 循环 查询
其他方法:
例: l1 = ['武大', '太白', '吴老师', '武大', '武大']
(1) len ()获取列表的长度(总个数)
l1 = ['武大', '太白', '吴老师', '武大', '武大'] print(len(l1))
(2) count 计算某个元素出现的次数
l1 = ['武大', '太白', '吴老师', '武大', '武大'] print(l1.count('武大'))
(3) index 通过元素找索引,找到第一个就返回,找不到就报错
l1 = ['武大', '太白', '吴老师', '武大', '武大'] print(l1.index('武大')) print(l1.index('武大1'))
(4)sort 从小到大排序 .sort(reverse=True) 从大到小
l1 = [4, 5, 3, 9, 8, 7, 6, 1] l1.sort() print(l1) l1.sort(reverse=True) print(l1)
(5)reverse() # 反转
l1 = [4, 5, 3, 9, 8, 7, 6, 1] print(l1)
(6)列表的嵌套
例:l1 = [1, 2, 'taibai', [1, 'alex', 3,]]
1, 将l1中的'taibai'变成大写并放回原处。
2,给小列表[1,'alex',3,]追加一个元素,'老男孩教育'。
3,将列表中的'alex'通过字符串拼接的方式在列表中变成'alexsb'
l1 = [1, 2, 'taibai', [1, 'alex', 3,]] l1[2] = l1[2].upper() print(l1) #[1, 2, 'TAIBAI', [1, 'alex', 3]] l1 = [1, 2, 'taibai', [1, 'alex', 3,]] small_l = l1[-1] small_l.append('老男孩教育') print(l1) # [1, 2, 'taibai', [1, 'alex', 3, '老男孩教育']] l1 = [1, 2, 'taibai', [1, 'alex', 3,]] l1[-1][1] = l1[-1][1] + 'sb' print(l1) [1, 2, 'taibai', [1, 'alexsb', 3]]
4.元祖 tuple 只读列表。
是python中基础数据类型之一,容器型数据类型,存储大量的数据。
(),里面的元素以,隔开的数据类型。
(1, '太白', [1,2,3],True, {'name': 'alex'}, (22,33))
其他语言中,没有元组的概念。
元组是不可以进行修改的,只能查询。
元组中存储的都是重要的数据,个人信息等等。
应用:
如果你想存储一些重要的数据,这些数据只读,不能修改,那么你就放到元组中。
元祖 可以索引, 切片
tu1 = (1, 'alex', [1,2,3], True) print(tu1[1]) #alex print(tu1[:3]) #(1, 'alex', [1, 2, 3])
元组只能查不能改
索引,切片(步长) 查询
tu1 = (1, 'alex', [1,2,3], True) for i in tu1: print(i) #1 #alex #[1, 2, 3] #True
tu1 = (1, 'alex', [1,2,3], True) print(len(tu1)) print(tu1.count(1)) print(tu1.index(True)) #注:在寻找Ture 时计算机读为 ” 1“所以实际上找的是”1“的索引 # 4 # 2 # 0
可以删除元组
tu1 = (1, 'alex', [1,2,3], True) del tu1 print(tu1) #结果 : NameError: name 'tu1' is not defined
元组当真不能改么???
元祖不可以改, 但可以改变元祖里面的列表等
tu1 = (1, 'alex', [1,2,3], True, (1,2,3)) tu1[2].append('太白') print(tu1) #(1, 'alex', [1, 2, 3, '太白'], True, (1, 2, 3)) tu1.append(666) print(tu1) #报错 AttributeError: 'tuple' object has no attribute 'append'
5.range
内置函数,python给你提供的一个功能。
将range视为:可控制范围的数字列表。
range(1,10) # 顾头不顾腚 for i in range(1,10): print(i)
range 常与 for 循环一起使用
for i in range(1,101): print(i)
for i in range(2, 101, 2): print(i)
for i in range(2, 101, 2): #(加上步长) print(i)
for i in range(10): print(i) #结果为 0,1,2,3,4,5,6,7,8,9 (默认从0 开始 )
# range多与for循环配合。
l1 = ['无sir', 'alex', '太白', 100, 1, 2, 3] for i in range(len(l1)): print(i)
二、作业
1.查找列表li中的元素,移除每个元素的空格,并找出以"A"或者"a"开头,并以"c"结尾的所有元素,并添加到⼀个新列表中,最后循环打印这个新列表。
li = ["TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", " aqc"] l =[] for i in li: a = i.strip() if a.startswith('A') and a.endswith('c') or a.startswith('a') and a.endswith('c'): l.append(a) for i in l: print(i)
2.开发敏感词语过滤程序,提示⽤户输⼊评论内容,如果⽤户输⼊的内容中包含特殊的字符:
敏感词列表 li = ["苍⽼师", "东京热", "武藤兰", "波多野结⾐"]
则将⽤户输⼊的内容中的敏感词汇替换成等⻓度的*(苍⽼师就替换***),并添加到⼀个列表中;如果⽤户输⼊的内容没有敏感词汇,则直接添加到上述的列表中。
comment_list = [] li = ["苍老师", "东京热", "武藤兰", "波多野结⾐"] comment = input('请输入你的评论:').strip() for name in li: if name in comment: #可有可无,因为replace ,没有不会报错 comment = comment.replace(name,len(name)*'*') comment_list.append(comment) print(comment_list)
3.有如下列表
li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn"]
循环打印列表中的每个元素,遇到列表则再循环打印出它⾥⾯的元素。
我想要的结果是:
1
3
4
"alex"
3
7,
8
"taibai"
5
ritian
li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn"] for i in li: if type(i) == list: for a in i: if type (a) == str: a = a.lower() print(a) else: if type(i) == str: i=i.lower() print(i)