今天的内容主要是join的用法和字典的用法,由于已经有前面的列表作为基础,所以还比较简单,不过因为昨天的作业比较难也比较多,所以作业的讲解占用的时间比较长。我需要好好消化一下作业的部分。
思维导图:
前一天内容回顾:
1:list:li = [1,2,3,5,'a'] 增加:append:末尾加入==追加 insert:插入,在任意位置,insert(index,'内容') extend:迭代着加入,'asc' ----> a,s,c [1,2,3] ---->1,2,3 删除:pop 按索引删除,有返回值 remove:按元素删除 del:del li[0] del li[1:4] del li clear:清空 改:li[0] = 'fdfgdg' li[1:3] = 'abcd' li = [1,a,b,c,d,5,'a'] 查询:按索引,切片,for while等都可以查出。 方法:count 没有切片 sort从小到大,正序,sort(reverse = True)倒叙排序 reverse:反转 index:找出元素的索引位置 可以切片 li = [1,2,[3,4,'taibai','a'],3,5,'a'] li[2][2]=li[2][2].captize
2,元祖。只读,不能更改,儿子不能改,孙子可以改。 可以切片。 3,range(4,12) = [4,5,。。。。11]
py2:xrange range py3:range
前一天作业内容讲解:
1 li = [1,3,2,'a',4,'b',5,'c'] 2 # print(li[-1]) 3 # print(li[7:]) 4 #3 5 lis = [2,1,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv'] 6 ''' 7 1)将列表lis中的’tt’变成大写(用两种方式)。 8 2)将列表中的数字3变成字符串’100’(用两种方式)。 9 3)将列表中的字符串’1’变成数字101(用两种方式)。 10 ''' 11 # lis[3][2][1][0] = 'TT' 12 # new_str = lis[3][2][1][0].upper() 13 # lis[3][2][1][0] = new_str 14 # lis[3][2][1][1] = '100' 15 # lis[3][2][1][1] = str(lis[3][2][1][1] + 97) 16 # lis[3][2][1][2] = 101 17 # print(lis) 18 # lis[3][2][1][2] = int(lis[3][2][1][2]) + 100 19 # lis[3][2][1][2] = int(str(10) + lis[3][2][1][2]) 20 lis = str([2,3,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv']) 21 # print(lis,type(lis)) 22 # lis = lis.replace('3','100') 23 # print(lis) 24 # li = lis.split(',') 25 # print(li,type(li)) 26 ''' 27 4,请用代码实现: 28 li = [‘alex’,’eric’,’rain] 29 利用下划线将列表的每一个元素拼接成字符串"alex_eric_rain" 30 ''' 31 #format 32 33 li = ['alex','eric','rain'] 34 # info = '{}_{}_{}'.format(li[0],li[1],li[2]) 35 # print(info) 36 37 # li = ['alex','eric','rain'] 38 # msg = "" 39 # is_first = True 40 # for item in li: 41 # if is_first: 42 # tmp = item 43 # print(tmp) 44 # is_first =False 45 # else: 46 # tmp = "_" + item 47 # print(tmp) #'_eric' 48 # msg += tmp # 'alex_eric' 49 # print(msg) 50 # print(msg) 51 # li = ['alex','eric','rain'] 52 # sb='alex' 53 # for i in li[1:]: 54 # sb=sb+"_"+i 55 # print(sb) 56 #join 57 # li = ['alex','eric','rain'] 58 # str(li) 59 # temp = ''.join(li) 60 # print(temp) 61 #将str ---> list split 62 #将list ---> str join 63 # s = 'alex' 64 # temp = '*'.join(s) # 可迭代对象 65 # print(temp) 66 # li = [1,2] 67 # li = str(li) 68 # print(li[1],type(li[1])) 69 ''' 70 5,查找列表li中的元素,移除每个元素的空格, 71 并找出以’A’或者’a’开头,并以’c’结尾的所有元素,并添加到一个新列表中,最后循环打印这个新列表。 72 li = [‘taibai ’,’alexC’,’AbC ’,’egon’,’ Ritian’,’ Wusir’,’ aqc’] 73 ''' 74 # li = [' taibai ','alexC','AbC ','egon',' Ritian',' Wusir',' aqc'] 75 # l1 = [] 76 # for i in li: 77 # j = i.strip() 78 # # if j[0].upper() == 'A' and j[-1] == 'c': 79 # if j.startswith('A') and j[-1] == 'c': 80 # l1.append(j) 81 # 82 # for k in l1: 83 # print(k) 84 # li = ["苍老师","东京热",'武藤兰','波多野结衣'] 85 # new_li = [] 86 # info = input('请输入你的评论') # 苍老师,fdsa东京热 87 # for i in li: 88 # if info.find(i) != -1: 89 # l = len(i) 90 # info = info.replace(i,'*'*l) #***,fdsa东京热 91 # new_li.append(info) 92 # print(new_li) 93 94 """ 95 7,有如下列表li = [1,3,4’,alex’,[3,7,8,’taibai’],5,’ritian’] 96 循环打印列表中的每个元素,遇到列表则再循环打印出它里面的元素。 97 我想要的结果是(用三种方法实现) 98 """ 99 li = [1,3,4,'alex',[3,7,8,'taibai'],5,2] 100 # print('********',li.index([3,7,8,'taibai'])) 101 # new_li = [] 102 # for i in li: 103 # if type(i) == list: # i == [3,7,8,'taibai'] 104 # index_list = li.index(i) # index_list == li.index([3,7,8,'taibai']) == 4 105 # new_li = li[:index_list] # new_li = [1,3,4,'alex',] 106 # new_li.extend(li[index_list]) # [1,3,4,'alex',].extend([3,7,8,'taibai']) 107 # # new_li = [1,3,4,'alex',3,7,8,'taibai'] 108 # new_li = new_li.extend(li[index_list+1:]) # li[index_list+1:] ==[5,2] 109 #new_li = [1,3,4,'alex',3,7,8,'taibai',5,2] 110 # for j in new_li: 111 # print(j) 112 # li = [1,2,3] 113 # l2 = ['a','b','c'] 114 # l3 = li+l2 115 # print(l3) 116 l = [1,2,3,'4'] 117 l[1] = ['2',3,'alex'] 118 print(l) #[1,['2',3,'alex'],3,'4'] [1,'2',3,'alex',3,'4'] 119 l[1:2] = ['2',3,'alex'] 120 print(l) 121 122 li = [1,3,4,'alex',[3,7,8,'taibai'],5,2] 123 for i in li: ####方法一 124 if type(i) == list: 125 index_list = li.index(i) # 4 i = [3,7,8,'taibai'] 126 li[index_list:index_list+1] = i # li[4:5] = [3,7,8,'taibai'] 127 # li = [1,3,4,'alex',3,7,8,'taibai',5,2] 128 # print(i) 129 # for j in li: 130 # print(j)
当天内容讲解:join的使用方法.join可以把列表转换成字符串,得到的字符串可以进行字符串的一切变化和运算。
字典的用法:
增加的方法有两种,第一种就是在直接在原字典下面叠加字典的格式如下图:叠加后直接打印。当键与原字典相同时自动覆盖,否则直接加在原字典末尾位置。
另一种是用setdefault,例:dic.setdefault('被增加的内容') 如果被增加的内容里有原字典的元素,则覆盖原元素,否则直接增加。
删除用pop,按照键去删除,然后返回删除的内容。如果删除的内容是原字典不存的,会报错,除非设置报错的返回值,如下图:
1 dic = {} 2 dic['weight'] = 75 3 dic['name'] = '日天' 4 print(dic) 5 6 7 8 {'weight': 75, 'name': '日天'}
删除用pop,按照键去删除,然后返回删除的内容。如果删除的内容是原字典不存的,会报错,除非设置报错的返回值,如下图:
还有删除的方法,clear,清空字典;del dic[‘被删的键’],如果被删的键没有,会报错。
另外有一个方法是随机删除---popitem,几乎不用。
改的方法:直接在原列表下叠加dic[‘键’]=的值如图:直接打印dic得到结果。
dic = {'name':'alex','age':56,'hobby ':'oldwomem'} dic['name']='jinxing' print(dic) {'name': 'jinxing', 'age': 56, 'hobby ': 'oldwomem'}
用update改:原有的内容不会改变,否则直接添加。
查的方法:
最直接的方法直接print(dic[‘键’])如果键没有,会报错;还有用get查 :如下图
get直接加get(“键”),若键不存在返回‘none’,不报错。
用for循环查询:
1 #1,字典无序。2,数据关联性强,3键值对。唯一一个映射的数据类型。 2 # dic = {'name':'jinxin','age':20} 3 # dic = {'py8期':['晓梅','方胜君',],'py6期':['zhangsan','lisi','wangwu']} 4 # li = ['alex','taibai','ritian'] 5 # print(dic['name']) 6 #字典的键必须是可哈希的(不可变的数据类型:字符串,数字,布尔值,元祖)并且是唯一的 7 #不可哈希的(可变的数据类型:列表,字典,set) 8 dic = {'name':'alex','age':56,'hobby ':'oldwomem'} 9 # print(dic) 10 #增:1 11 dic['weight'] = 75 12 # dic['name'] = '日天' 13 # print(dic) # null 14 #setdefault 有键值对不做任何改变,没有键值对才添加 15 # dic.setdefault('k') 16 # dic.setdefault('name','v') 17 # print(dic) 18 #删 pop 19 # print(dic.pop('name')) 20 # print(dic.pop('fdsafdsa',None)) 21 # dic.popitem() 22 # print(dic) 23 # dic.clear() # 清空 24 # print(dic) 25 # del dic['name'] 26 # print(dic) 27 dic = {'name':'alex','age':56,'hobby ':'oldwomem'} 28 dic1 = {'name':'barry','job':'teacher'} 29 #改 30 # dic['name'] = 'jinxin' 31 # print(dic) 32 #update 33 # dic.update(dic1) 34 # print(dic) 35 # print(dic1) # {'name': 'barry', 'job': 'teacher'} 36 37 #查 38 # print(dic['name']) 39 # print(dic['gfgfgfdgf']) # 报错 40 # print(dic.get('name')) 41 # print(dic.get('gfdgfgf')) # None 42 # print(dic.get('gfdgfgf','sb,没有这个键')) 43 # print(dic.keys(),type(dic.keys())) 44 # for key in dic.keys(): 45 # print(key) 46 # for i in dic: 47 # print(i) 48 # print(dic.values()) 49 # for value in dic.values(): 50 # print(value) 51 # print(dic.items()) 52 # a,b = [1,2] 53 # key,value = (3,4) 54 # print(a,b) 55 # for key,value in dic.items(): 56 # print(key,value) 57 dic1 = { 58 'name':['alex',2,3,5], 59 'job':'teacher' 60 } 61 dic1['name'][0] = dic1['name'][0].capitalize() 62 print(dic1)
字典里面,有一个setdefault用法,
我们先来解释一下,它是干什么的,setdefault,是一个默认字典,
1:key存在,则不赋值,key不存在则设置默认值,
2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值,
# d={} # print(d.setdefault("b",2)) # 2 这里我们的d里面没有值,它就返回设置的默认值,这个时候你给它赋什么值,它就返回什么值给你 # c={"a":111} # print(c.setdefault("a",2)) # 111 这里我们的c里面有key,返回的就是它自己已有的值,即便你设置了新的值,也不会生效
setdefault源码:
在builtins.py里面,有一个字典类
class dict(object):
def setdefault(self, k, d=None): # real signature unknown; restored from __doc__ """ D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """ pass
v=dict.fromkeys(['k1','k2'],[]) ''' def fromkeys(*args, **kwargs): # real signature unknown """ Returns a new dict with keys from iterable and values equal to value. """ pass
'''
我们的fromkeys是把它里面需要的参数迭代组合成一个字典,前面的参数是key,后面的参数是value,就相当于用zip方法把他们给拼接上,
然后就组成了有两个键值对的字典,在下面得到的结果,
v['k1'].append(123) # print(v) # {'k1': [123], 'k2': [123]} v['k1']=321 这里是重新对k1这个键进行了赋值,做了更新操作 print(v) # {'k1': 321, 'k2': [123]}