day12-数据类型之列表、元组、字典、for循环、布尔值
1、list 类,列表
########################################### 灰魔法:list类中提供的方法#############################
append(self, p_object)
1 功能:在原来值后面追加 2 li = [11,22,33,44] 3 li.append(55) 4 print(li) 5 输出结果:[11, 22, 33, 44, 55]
clear(self)
1 功能:清空列表 2 li = [11,22,33,44] 3 li.clear() 4 print(li) 5 输出结果:[]
copy(self)
1 功能:浅拷贝 2 li = [11,22,33,44] 3 v = li.copy() 4 print(v) 5 输出结果:[11, 22, 33, 4
count(self, value)
1 功能:计算元素出现的次数 2 li = [11,22,33,44,22] 3 v = li.count(22) 4 print(v) 5 输出结果:2
extend(self, iterable)
1 功能:扩展原来的列表,参数:可迭代对象 2 li = [11,22,33,44,22] 3 li.extend([99,22,"李阳"]) 4 print(li) 5 输出结果:[11, 22, 33, 44, 22, 99, 22, '李阳']
index(self, value, start=None, stop=None)
1 功能:根据值获取当前索引位置,从最左边开始找 2 li = [11,22,33,44,22] 3 v = li.index(22) 4 print(v) 5 输出结果:1
insert(self, index, p_object)
1 功能:在指定索引位置插入 2 li = [11,22,33,44,22] 3 li.insert(0,99) 4 print(li) 5 输出结果:[99, 11, 22, 33, 44, 22]
pop(self, index=None)
1 功能:删除某个值(1.指定索引;2.默认是最后一个值)并获取删除的值 2 li = [11,22,33,44,22] 3 v1 = li.pop() 4 v2 = li.pop(2) 5 print(v1) 6 print(li) 7 print(v2) 8 输出结果: 9 22 10 [11, 22, 44] 11 33
remove(self, value)
1 功能:删除列表中的指定值,左边优先 2 li = [11,22,33,44,22] 3 li.remove(22) 4 print(li) 5 输出结果:[11, 33, 44, 22]
reverse(self)
1 功能:将当前列表进行翻转 2 li = [11,22,33,44,22] 3 li.reverse() 4 print(li) 5 输出结果:[22, 44, 33, 22, 11]
sort(self, key=None, reverse=False)
1 功能:默认从小到大排序,reverse=True 从大到小排序 2 li = [11,22,33,44,22] 3 li.sort() 4 li.sort(reverse=True) 5 print(li) 6 输出结果: 7 [11, 22, 22, 33, 44] 8 [44, 33, 22, 22, 11]
##############################################深灰魔法#######################################################
列表格式
1 通过list类创建的对象,li 2 中括号括起来 3 ,分割每个元素 4 列表中的元素可以是 数字,字符串,列表,布尔值...所有的元素都可以放进去。 5 “集合”,内部放置任何东西 6 列表的元素可以被修改 7 列表中可以嵌套任何类型
索引取值
1 print(li[3]) 2 输出结果 45
切片
1 print(li[4:5]) 2 print(li[3:-1]) 3 print(li[:4]) 4 print(li[4:]) 5 输出结果 [['李阳', [12, 20], 'liyang']] 6 输出结果 [45, ['李阳', [12, 20], 'liyang'], 65, 45, 'age', 'name'] 7 输出结果 [1, 23, 12, 45] 8 输出结果 [['李阳', [12, 20], 'liyang'], 65, 45, 'age', 'name', True]
for循环
1 li = [1,23,["李阳",[12,20]],'name',True] 2 for item in li: 3 print(item) 4 输出结果: 5 1 6 23 7 ['李阳', [12, 20]] 8 name 9 True
索引修改
1 li = [1,23,["李阳",[12,20]],'name',True] 2 li[2] = 99 3 print(li) 4 输出结果:[1, 23, 99, 'name', True] 5 li[1] = [11,22,33] 6 print(li) 7 输出结果:[1, [123], 99, 'name', True]
切片修改
li = [1,23,["李阳",[12,20]],'name',True] li[1:2] = [88,66] print(li) 输出结果:[1, 88, 66, ['李阳', [12, 20]], 'name', True]
索引删除
1 li = [1,23,["李阳",[12,20]],'name',True] 2 del li[1] 3 print(li) 4 输出结果:[1, ['李阳', [12, 20]], 'name', True
切片删除
1 li = [1,23,["李阳",[12,20]],'name',True] 2 del li[1:3] 3 print(li) 4 输出结果:[1, 'name', True]
in 操作
1 li = [1,23,["李阳",[12,20],"liyang"],True] 2 v1 = 1 in li 3 print(v1) 4 输出结果:True 5 6 v2 = '李阳' in li 7 print(v2) 8 输出结果:False
取列表中列表中的元素操作
1 li = [1,23,["李阳",[12,20],"liyang"],True] 2 print(li[2][1][1]) 3 输出结果:20
把字符串转换成列表 (转换过程内部使用for循环) 注意:数字不能转换成列表
1 s1 = "liyang" 2 v = list(s1) 3 print(v) 4 输出结果:['l', 'i', 'y', 'a', 'n', 'g']
把列表转换成字符串
1.既有数字又有字符串的需要自己写一个for循环一个一个处理。
1 li = [11,22,33,"123","liyang"] 2 s = "" 3 for i in li: 4 s = s + str(i) 5 print(s) 6 输出结果:112233123liyang
2.列表中的元素只有字符串的可以直接使用join
1 li = ["123","liyang","sun"] 2 v = "".join(li) 3 print(v) 4 输出结果:123liyangsun
列表嵌套
1 li = [1, 2, 3,['alex', 'wusir', '老男孩'], 4] 2 for x in li: 3 if isinstance(x, list): 4 for y in x: 5 print(str(y) + ' ', end='') 6 else: 7 print(str(x) + ' ', end='')
8 输出结果:1, 2, 3,'alex', 'wusir', '老男孩',4
2、元组 tuple
###########################################灰魔法:tuple类中提供的方法#####################
count(self, value)
1 功能:获取指定元素在元组中出现的次数 2 tu = (11,22,33,44,22) 3 v = tu.count(22) 4 print(v) 5 输出结果:
index(self, value, start=None, stop=None)
1 功能:获取指定元素在元组中的位置,从最左边开始找 2 tu = (11,22,33,44,22) 3 v = tu.index(22) 4 print(v) 5 输出结果:1
#####################################深灰魔法############################################
元组:tuple
1 元素不可被修改,不能被增加和删除 2 一般写元组的时候 ,推荐在最后加入, 3 书写格式() 4 元组是有序的
索引取值
1 tu = (11,"liyang",(11,22),[(55,66)],True,99,) 2 v = tu[0] 3 print(v)
索引切片
1 tu = (11,"liyang",(11,22),[(55,66)],True,99,) 2 v = tu[0:3] 3 print(v) 4 输出结果:(11, 'liyang', (11, 22))
for循环,可迭代对象
tu = (11,"liyang",(11,22),[(55,66)],True,99,) for item in tu: print(item) 输出结果: 11 liyang (11, 22) [(55, 66)] True 99
转换
1 s = "liyang" 2 li = ["sun","lili"] 3 tu = ("conquer","good") 4 5 v1 = tuple(s) 6 v2 = tuple(li) 7 v3 = tuple(tu) 8 print(v1) 9 print(v2) 10 print(v3) 11 输出结果: 12 ('l', 'i', 'y', 'a', 'n', 'g') 13 ('sun', 'lili') 14 ('conquer', 'good')
元组的一级元素不可修改/删除/增加
1 tu = (11,"liyang",(11,22),[(55,66)],True,99,) 2 tu[3][0] = 999 3 print(tu) 4 输出结果: 5 (11, 'liyang', (11, 22), [999], True, 99)
三、字典 dict
#################################################灰魔法###########################################
fromkeys(*args, **kwargs)
1 功能:根据序列创建字典,并指定统一的值 2 v = dict.fromkeys(["k1","k2",123],'liyang') 3 print(v) 4 输出结果:{'k2': 'liyang', 123: 'liyang', 'k1': 'liyang'}
get(self, k, d=None)
1 功能:根据key获取值,key不存在时,可以指定默认值(None) 2 dic = { 3 "k1": 'liyang' 4 } 5 v = dic.get('k2',1123) 6 print(v) 7 输出结果: 8 1123
pop(self, k, d=None)
1 功能:指定key删除值 2 dic = { 3 "k1": 'liyang', 4 "k2": 'sun' 5 } 6 v = dic.pop('k1') 7 print(dic,v) 8 输出结果:{'k2': 'sun'} liyang
popitem(self)
1 功能:随机删除key和vlear 2 dic = { 3 "k1": 'liyang', 4 "k2": 'sun' 5 } 6 k,v = dic.popitem() 7 print(dic,k,v) 8 输出结果: 9 {'k1': 'liyang'} k2 sun
setdefault(self, k, d=None)
1 功能:设置值 2 如果已经存在,不设置,获取当前key对应的值 3 如果不存在,设置值,获取当前key对应的值 4 dic = { 5 "k1": 'liyang', 6 "k2": 'sun' 7 } 8 v = dic.setdefault('k1',123) 9 print(dic,v) 10 输出结果: 11 {'k2': 'sun', 'k1': 'liyang'} liyang
update(self, E=None, **F)
1 功能:更新 2 dic = { 3 "k1": 'liyang', 4 "k2": 'sun' 5 } 6 dic.update({'k1':'zzzz','k3': 123}) 7 dic.update(k1='zzzz',k3=123) 8 print(dic) 9 输出结果:{'k1': 'zzzz', 'k3': 123, 'k2': 'sun'}
################################################深灰魔法#################################
字典格式
1 键值对 2 字典的value可以是任何值 3 列表、字典不能作为字典的key 4 字典是无序的 5 info = {"k1":"v1","k2":"v2"}
索引取值
1 info = { 2 1: 'adfs', 3 "k1": 'add', 4 True: "123", 5 (11,22): "123", 6 "k2": (11,22) 7 } 8 v1 = info["k1"] 9 print(v1) 10 v2 = info["k2"][0] 11 print(v2) 12 输出结果: 13 add 14 11
del 删除键值
1 info = { 2 'k1': 'liyang', 3 'k2': 'sun' 4 } 5 del info['k1'] 6 print(info) 7 输出结果: 8 {'k2': 'sun'}
for 循环
默认循环字典里的key
value:获取字典的值
items:获取字典的key和value
1 info = { 2 'k1': 'liyang', 3 'k2': 'sun' 4 } 5 for item in info.keys(): 6 print(item) 7 输出结果: 8 k1 9 k2 10 11 for item in info.values(): 12 print(item) 13 输出结果: 14 liyang 15 sun 16 17 for k,v in info.items(): 18 print(k,v) 19 20 输出结果: 21 liyang 22 sun 23 k1 liyang 24 k2 sun
整理
一、数字 int() 二、字符串 replace/find/join/strip/startswith/split/upper/lower/format tempalte = "i am {name},age:{age}" v = tempalte.format(**{'name':'liyang','age':28}) 三、列表 append/extend/insert 四、元组 索引,切片,循环 五、字典 get/update/keys/items/values for循环 六 、布尔值 bool(...) None "" () [] {} 0 ==> False
四、课后练习
a.列表课后作业练习
#!/usr/bin/env python # coding: utf-8 # 1:写代码,有如下列表,按照要求实现每一个功能 # li = ['zhangsan','lisi','wangwu','liliu','zhuqi'] # 1:计算列表的长度并输出 # v = len(li) # print(v) # 2:列表中追加元素'wangba',并输出添加后的列表 # li.append('wangha') # print(li) # 3:请在列表的第1个位置插入元素’Tony’,并输出添加后的列表 # li.insert(1,'Tony') # print(li) # 4:请修改列表第2个位置的元素为’Kelly’,并输出修改后的列表 # li[2] = 'Kelly' # print(li) # 5:请将列表l2=[1,’a’,3,4,’heart’]的每一个元素添加到列表li中,一行代码实现,不允许循环添加 # l2 = [1,'a',3, 4,'heart'] # li.append(l2) # print(li) # 6:请将字符串s = ‘qwert’的每一个元素添加到列表li中,一行代码实现,不允许循环添加 # s = 'qwert' # li.extend(s) # print(li) # 7:请删除列表中的元素’wangwu’,并输出删除后的列表 # li.remove('wangwu') # print(li) # 8:请删除列表中的第2个元素,并输出删除的元素和删除元素后的列表 # print(li.pop(2)) # print(li) # 9:请删除列表中的第2至4个元素,并输出删除元素后的列表 # del li[2:5] # print(li)
# 10:请将列表所有得元素反转,并输出反转后的列表 # li.reverse() # print(li) # 11:请计算出‘zhangsan’元素在列表li中出现的次数,并输出该次数 # v = li.count('zhangsan') # print(v) # 2:写代码,有如下列表,利用切片实现每一个功能 # li1 = [1,3,2,'a',4,'b',5,'c'] # 1:通过对li1列表的切片形成新的列表l1,l1 = [1,3,2] # l1 = li1[:3] # print(l1) # 2:通过对li1列表的切片形成新的列表l2,l2 = [’a’,4,’b’] # l2 = li1[3:6] # print(l2) # 3:通过对li1列表的切片形成新的列表l3,l3 = [1,2,4,5] # l3 = li1[:7:2] # print(l3) # 4:通过对li1列表的切片形成新的列表l4,l4 = [3,’a’,’b’] # l4 = li1[1:6:2] # print(l4) # 5:通过对li1列表的切片形成新的列表l5,l5 = [‘c’] # l5 = li1[-1:] # print(l5) # 6:通过对li1列表的切片形成新的列表l6,l6 = [‘b’,’a’,3] # l6 = li1[-3::-2] # print(l6) # 3:写代码,有如下列表,按照要求实现每一个功能 # lis = [2,3,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv'] # 1:将列表lis中的’tt’变成大写(用两种方式) # lis[3][2][1][0] = 'TT' # print(lis) # lis[3][2][1][0] = lis[3][2][1][0].upper() # print(lis) # 2:将列表中的数字3变成字符串’100’(用两种方式) # lis[1] = '100' # lis[3][2][1][1] = '100' # print(lis) # lis[1] = str(int(lis[1] + 97)) # lis[3][2][1][1] = str(int(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] = 101 # print(lis) # lis[3][2][1][2] = int(int(lis[3][2][1][2]) + 100) # print(lis) # 4请用代码实现: # 利用下划线将列表的每一个元素拼接成字符串"sam_tom_jack" # li = ['sam','tom','jack'] # v = "_".join(li) # print(v) # 5:查找列表li中的元素,移除每个元素的空格 # 并找出以’A’或者’a’开头,并以’c’结尾的所有元素 # 并添加到一个新列表中,最后循环打印这个新列表。 # li3 = ['taibai ','alexC','AbC ','egon',' Ritian',' Wusir',' aqc'] # new_list = [] # for i in li3: # s = i.strip() # if (s.startswith('A') or s.startswith('a') and s.endswith('c')): # new_list.append(s) # else: # pass # print(new_list) # 6:开发敏感词语过滤程序,提示用户输入评论内容,如果用户输入的内容中包含特殊的字符: # 敏感词列表 li = ["苍老师","东京热",”武藤兰”,”波多野结衣”] # 则将用户输入的内容中的敏感词汇替换成***,并添加到一个列表中; # 如果用户输入的内容没有敏感词汇,则直接添加到上述的列表中 # li = ["苍老师","东京热","武藤兰","波多野结衣"] # # new_list = [] # s = input('>>>') # for i in li: # if i in s: # s = s.replace(i,'***') # else: # new_list.append(s) # print(new_list) # # 7有如下列表li = [1,3,4’,alex’,[3,7,8,’taibai’],5,’ritian’] # 循环打印列表中的每个元素,遇到列表则再循环打印出它里面的元素。 # 我想要的结果是(用两种方法实现,其中一种用range做) # 第一种 # li = [1,3,4,'alex',[3,7,8,'taibai'],5,'ritian'] # for i in li: # if type(i) == list: # for x in i: # print(str(x) + ' ', end = '') # else: # print(str(i) + ' ', end = '') #第二种 # # for x in range(len(li)): # if isinstance(li[x],list): # for y in li[x]: # print(y) # else: # print(li[x])
b.元祖、字典课后练习题
# 1,有如下变量(tu是个元祖),请实现要求的功能 # tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44]) # a. 讲述元祖的特性 # 答:元祖被称为只读列表,不能被修改 # b. 请问tu变量中的第一个元素 “alex” 是否可被修改? # 答:不能 # c. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改? # 如果可以,请在其中添加一个元素 “Seven” # 答:'k2'对应的值是一个列表(list)类型,可以被修改 # d. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven” # 答:'k3'对应的是元组,不能被修改 # 2, 字典dic # dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]} # a. 请循环输出所有的key # for i in dic.keys(): # print(i) # b. 请循环输出所有的value # for i in dic.values(): # print(i) # c. 请循环输出所有的key和value # for k,v in dic.items(): # print(k,v) # d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典 # dic['k4'] = 'v4' # print(dic) # dic.setdefault('k4','v3') # print(dic) # e. 请在修改字典中 “k1” 对应的值为 “alex”,输出修改后的字典 # dic['k1'] = "alex" # print(dic) # f. 请在k3对应的值中追加一个元素 44,输出修改后的字典 # dic["k3"].append(44) # print(dic) # g. 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典 # dic['k3'].insert(1,18) # print(dic) # 3, # av_catalog = { # "欧美":{ # "www.youporn.com": ["很多免费的,世界最大的","质量一般"], # "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"], # "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"], # "x-art.com":["质量很高,真的很高","全部收费,屌丝请绕过"] # }, # "日韩":{ # "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"] # }, # "大陆":{ # "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"] # } # } # 1,给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个元素:'量很大'。 # av_catalog["欧美"]["www.youporn.com"].insert(1, '量很大') # print(av_catalog) # 2,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。 # del av_catalog["欧美"]["x-art.com"][1] # print(av_catalog) # 4,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。 #av_catalog["日韩"]["tokyo-hot"][1] = av_catalog["日韩"]["tokyo-hot"][1].upper() # 5,给 '大陆' 对应的字典添加一个键值对 '1048' :['一天就封了'] #av_catalog["大陆"]['1048'] = ['一天就封了'] # 6,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。 # av_catalog["欧美"].pop("letmedothistoyou.com") # 7,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来' #av_catalog["大陆"]['1024'][0] = av_catalog["大陆"]['1024'][0] + '可以爬下来' # 4、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....} # li = "k:1|k1:2|k2:3|k3:4" # dic = {} # for i in li.split('|'): # dic.setdefault(i.split(":")[0],i.split(":")[1]) # print(dic) # 5、元素分类有如下值li= [11,22,33,44,55,66,77,88,99,90], # 将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 # 即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表} # li= [11,22,33,44,55,66,77,88,99,90] # dic = {'k1':[],'k2':[]} # for i in li: # if i > 66: # dic['k1'].append(i) # elif i < 66: # dic['k2'].append(i) # else: # pass # print(dic) # 6、输出商品列表,用户输入序号,显示用户选中的商品 # 商品 li = ["手机", "电脑", '鼠标垫', '游艇'] # 要求: # 1:页面显示 序号 + 商品名称,如: # 1 手机 # 2 电脑 # … # 2: 用户输入选择的商品序号,然后打印商品名称 # 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。 # 4:用户输入Q或者q,退出程序。 # # db = { # '北京':{ # '石景山':{}, # '东城':{}, # }, # '上海':{ # '浦东':{}, # '浦西':{}, # }, # '杭州':{ # '萧山':{}, # } # } # path = [] # # while True: # temp = db # for item in path: # temp = temp[item] # print('当前节点的所有子节点:', list(temp.keys()),'\n') # choice = input('1:添加节点; 2:查看节点(Q退出/返回上一级B)\n>>>') # if choice == '1': # k = input('请输入要添加的子节点名称:') # if k in temp: # print('节点已经存在') # else: # temp[k] = {} # elif choice == '2': # k = input('请输入要查看的子节点:') # if k in temp: # path.append(k) # else: # print('子节点名称错误') # elif choice.lower() == 'b': # if path: # path.pop() # elif choice.lower() == 'q': # break # else: # print('输入不合法')