1.列表
1)定义:列表由[ ]表示,每一项元素使用逗号隔开,列表什么元素都能装,能装对象的对象,列表可以装大量元素
2)列表的索引和切片
①列表的切片和字符串一摸一样
1 lsr = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝"] 2 print(lsr[1][1]) 3 输出: 4 特
②列表中切片,切出来的还是一个列表
lsr = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝"] print(lsr[1:3]) 输出: ['奥特曼', '舌尖上的中国']
③切片时,同样顾头不顾尾
lsr = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝"] print(lsr[-3:-1]) 输出: ['奥特曼', '舌尖上的中国']
④从头到尾切,且每隔两个切一个
lsr = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] print(lsr[2::2]) 输出: ['舌尖上的中国', '金刚']
⑤倒着切片
1 lsr = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] 2 print(lsr[-1:-5:-2]) 3 输出: 4 ['金刚', '舌尖上的中国']
3)列表的增删改查(列表的长度是可变的)
①增加:在原有的列表上进行追加(在列表屁股后追加)
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] lst.append("金刚狼") print(lst) 输出: ['葫芦娃', '奥特曼', '舌尖上的中国', '海绵宝宝', '金刚', '金刚狼']
②增加:往列表的某个具体位置添加元素(其他元素往后移)
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] lst.insert(0,"西游记") print(lst) 输出: ['西游记', '葫芦娃', '奥特曼', '舌尖上的中国', '海绵宝宝', '金刚']
③增加:迭代添加元素(需要加[ ],如果不加,就会把字符串中每个元素添加进去)
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] lst.extend("西游记") print(lst) 输出: ['葫芦娃', '奥特曼', '舌尖上的中国', '海绵宝宝', '金刚', '西', '游', '记']
#通过加[]的方式添加元素
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] lst.extend(["西游记","三国演义","水浒转"]) print(lst) 输出: ['葫芦娃', '奥特曼', '舌尖上的中国', '海绵宝宝', '金刚', '西游记', '三国演义', '水浒转']
注:append一次只能添加一个元素,extend一次可以添加多个元素;insert是在指定位置添加
④删除:删除列表中某个固定位置的元素(但是会将删除的元素返回)pop
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] data = lst.pop(1) print(data) print(lst) 输出: 奥特曼 ['葫芦娃', '舌尖上的中国', '海绵宝宝', '金刚']
⑤删除:移除列表中的元素(元素不同不会报错)remove
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] lst.remove("舌尖上的中国") print(lst) 输出: ['葫芦娃', '奥特曼', '海绵宝宝', '金刚']
⑥删除:切片删除列表中元素
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] del lst[1:3] print(lst) 输出: ['葫芦娃', '海绵宝宝', '金刚']
⑦删除:删除列表中所有元素
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] lst.clear() print(lst) 输出: []
⑧修改:修改列表中元素
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] lst[1] = "西游记" print(lst) 输出: ['葫芦娃', '西游记', '舌尖上的中国', '海绵宝宝', '金刚']
⑨修改:切片修改元素(本质:先删除后添加)
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] lst[1:3] = ["西游记"] print(lst) 输出: ['葫芦娃', '西游记', '海绵宝宝', '金刚'] 注:若不加【】为迭代添加
#修改:切片修改元素的时候,如果步长不是1,需要注意元素的个数,否则会报错
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] lst[1::2] = ["西游记","水浒传"] print(lst) 输出: ['葫芦娃', '西游记', '舌尖上的中国', '水浒传', '金刚']
⑩查找:通过for循环以迭代的方式进行遍历列表元素
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] for e in lst: print(e)
⑪以列表索引进行查找
lst = ["葫芦娃","奥特曼","舌尖上的中国","海绵宝宝","金刚"] print(lst[1]) 输出: 奥特曼
4)列表的嵌套(使用降维操做对响应元素进行增删改查)
lst = ["葫芦娃","奥特曼",["舌尖上的中国","海绵宝宝",["西游记","三国演义","水浒传","apple"]]] lst[2][2][3] = lst[2][2][3].upper() lst[2][2][0] = "红楼梦" print(lst) 输出: ['葫芦娃', '奥特曼', ['舌尖上的中国', '海绵宝宝', ['红楼梦', '三国演义', '水浒传', 'APPLE']]]
5)列表常用方法/操作
①计算列表中某个元素出现的次数
lst = ["葫芦娃","奥特曼","西游记","三国演义","葫芦娃"] print(lst.count("葫芦娃")) 输出: 2
②对列表中的元素进行排序(默认升序)
lst = [25,10,12,33,2,9,14] lst.sort() print(lst) 输出: [2, 9, 10, 12, 14, 25, 33]
③对列表中的元素进行倒叙排序
lst = [25,10,12,33,2,9,14] lst.sort(reverse=True) print(lst) 输出: [33, 25, 14, 12, 10, 9, 2]
④将列表中的元素进行反转(即倒叙输出)
lst = ["葫芦娃","奥特曼","西游记","三国演义","葫芦娃"] lst.reverse() print(lst) 输出: ['葫芦娃', '三国演义', '西游记', '奥特曼', '葫芦娃']
⑤求列表的长度
lst = ["葫芦娃","奥特曼","西游记","三国演义","葫芦娃"] print(len(lst)) 输出: 5
注:输入list按下ctrl+鼠标点击可看到列表相关方法
2.元组
1)元组的定义:通过()将元素括起来,只读列表,只能看,啥也不能干(即不能对元组中的元素进行增删改操作)
注:如果()中只有一个元素,那么它不能算做一个元组,还是原来的数据类型
tup = (2) print(type(tup)) 输出: <class 'int'>
①元组中如果只有一个元素,需要在元组中写一个逗号(,)
tup = (2,) print(type(tup)) 输出: <class 'tuple'>
②定义一个空元组
tup = tuple() print(tup) print(type(tup)) 输出: () <class 'tuple'>
③定义一个元组
tup = ("人民币","美元","英镑","欧元") print(tup) 输出: ('人民币', '美元', '英镑', '欧元')
2)元组的查找
①查找:查找元组中固定位置元素(按照索引查找)
tup = ("人民币","美元","英镑","欧元") print(tup[2]) 输出: 英镑
②查找:元组的切片查找(切出来的还是一个元组)
tup = ("人民币","美元","英镑","欧元") print(tup[::2]) 输出: ('人民币', '英镑')
③按照for循环进行查找
tup = ("人民币","美元","英镑","欧元") for i in tup: print(i)
3)元组本身的元素是不可变的,但是元组的子元素可发生改变(即只管元组第一层的元素)
tup = ("人民币","美元","英镑",[]) tup[3].append("冥币") print(tup) 输出: ('人民币', '美元', '英镑', ['冥币'])
#如下操作会报错
tup = ("人民币","美元","英镑","apple") tup[3]=tup[3].upper() print(tup) 报错:TypeError: 'tuple' object does not support item assignment
注:元组的第一层是不能进行赋值的,内部元素是没有要求的(内部元素可变就可变,内部元素本身不可变就不能变,如元组内部是列表就可变,是字符串就不可变
3.range(可迭代对象)
①输出0至n-1
for i in range(10): print(i)
②从n至n-1
for i in range(5,10): print(i)
③按照步长切片
for i in range(5,10,2): print(i)
④倒着取值
for i in range(100,90,-1): print(i)
例:获取到列表的索引,拿到索引后,再通过索引获取列表的元素
lst= ["人民币","美元","英镑","冥币"] for i in range(len(lst)): print(lst[i]) 输出: 人民币 美元 英镑 冥币
4.练习
1)将列表lst=["lpl","lol","dnf"]转换为lpl_lol_dnf
lst = ["lpl","lol","dnf"] s = "" for i in lst: s = s + i + "_" print(s[:len(s)-1]) 输出: lpl_lol_dnf
2)查找列表ltr中的元素,移除每一个元素的空格,并找出以"A"或者"a"开头,并且以"c"结尾的所有元素,并添加到一个新的列表中,最后循环打印这个新列表
ltr = ["apple","dnf ","Abc "," la ji","LPLc"] lst = [] for i in ltr: i = i.replace(" ","") if (i.startswith("A") or i.startswith("a")) and i.endswith("c"): lst.append(i) print(lst) 输出: ['Abc']
3)开发敏感词语过滤程序,提示用户输入的评论内从,如果输出的内容中包含特殊的字符,将用户输入的铭感词汇转换为对等的*,并添加到一个列表中;如果用户输入的内容没有敏感词汇,则直接添加到上述的列表中;lst = ["fagong","耶稣","邪教","传销"]
①替换
lst = ["fagong","耶稣","邪教","传销"] content = input("请输入评论内容:") for i in lst: if i in content: content = content.replace(i,"*"*len(lst)) print(content) 输出: 请输入评论内容:fagong是一个邪教组织,不是一个传销组织 ****是一个****组织,不是一个****组织
②替换后放入列表中
lst = ["fagong","耶稣","邪教","传销"] lst_new= [] content = input("请输入评论内容:") for i in lst: if i in content: content = content.replace(i,"*"*len(lst)) lst_new.append(content) print(lst_new) 输入输出: 请输入评论内容:fagong是一个邪教组织,不是一个传销组织 ['****是一个****组织,不是一个****组织']
4)有如下列表,循环打印列表中的值遇到子列表,再次循环打印,如果遇到大写,转成小写
lst = ["apple","banana","orange",["Dog","pig","cat"],["Tree","flower"]] for i in lst: if type(i) == list: for e in i: if type(e) == str: print(e.lower()) else: print(e) else: if type(i) == str: print(i.lower()) else: print(i)
5)把班级学生的数学考试成绩录入到一个列表中:并求平均值;要求:录入的时候要带着学生姓名和成绩;例如:张三_44
lst = [] while 1: stu = input("请输入学生姓名和成绩(姓名_成绩):") if stu.upper() == "Q": break else: lst.append(stu) print(lst) #求平均值 sum = 0 for i in lst: score = i.split("_") sum += int(score[1]) print("平均值:",sum/len(lst)) ['zdz_10', 'zzm_20', 'zc_30'] 平均值: 20.0
补充:当列表中的元素数量很多时,不要使用insert()、pop()等方法,会降低程序效率