python's seventh day for me
Posted Qingqiu_Gu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python's seventh day for me相关的知识,希望对你有一定的参考价值。
数据类型的补充:
对于元祖: 如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型。
tu = (\'顾清秋\') tul = (\'顾清秋\',) print(type(tu)) print(type(tul)) # <class \'str\'> # <class \'tuple\'>
对于列表: 在循环一个列表时,最好不要进行删除的动作(一旦删除索引会随之改变),容易出错。
li = [1,2,3,4,5] #删除索引为奇数的元素 del li[1::2] #切片删除 print(li) # [1, 3, 5] li = [1,2,3,4,5] #删除索引为奇数的元素 for i in range (len(li)-1,-1,-1): #反向打印索引。 # print(i) if i % 2 ==1: #检测索引是否为奇数 del li[i] #从后往前删除元素,不会影响前面的索引位置。 print(li) # [1, 3, 5] li = [1,2,3,4,5] #删除索引为奇数的元素 li2 = [] #定义一个空列表,用来存放索引为偶数的元素 for i in range(len(li)): # print(i) if i % 2 == 0: li2.append(li[i]) #将索引为偶数的元素加入到li2中 li = li2 # 将列表li2中的索引为偶数的元素赋值给li print(li) # [1, 3, 5]
对于字典: 在循环字典中,不能增加或者删除此字典的键值对。否则会报错(dictionary changed size during iteration)
# 将字典中含有k元素的键以及其对应的键值对删除。 dic = {\'k1\':\'顾清秋\',\'k2\':\'懒笨呆\',\'name\':\'alex\'} li = [] #用来存放dic中含k元素的键。 for i in dic.keys(): # print(i) if \'k\' in i: #判断是否存在 li.append(i) for i in li: del dic[i] #删除dic中含k键的键值对。 print(dic)
# {\'name\': \'alex\'}
fromkeys()
dic = dict.fromkeys(\'abc\',\'alex\') print(dic) # {\'c\': \'alex\', \'b\': \'alex\', \'a\': \'alex\'} dic = dict.fromkeys([1,2,3],[]) print(dic) # 1: [], 2: [], 3: []} dic[1].append(\'顾清秋\') print(dic) # {1: [\'顾清秋\'], 2: [\'顾清秋\'], 3: [\'顾清秋\']} #由上面输出可以看出1,2,3所对应的[]是同一个空列表,一个改变其他的都随之改变。
tuple 与 list 之间的相互转换。
#将元祖转换成列表 tu = (1,2,3) li = list(tu) print(li) # [1, 2, 3] #将列表转换成元祖 li2 = [1,2,3] tu2 = tuple(li2) print(tu2) #(1, 2, 3)
数据类型转换成 bool 为 False
0, 空字符串, 空列表, 空字典, 空元祖。
tulpe ---> str (单向)
tu = (\'顾清秋\',\'lanbendai\') s = \'\'.join(tu) print(s) # 顾清秋lanbendai
集合 set
去重:
#去除li中重复的数字。 li = [11,22,33,33,44,22,55] li = list(set(li)) #set()去除重复的数字,再转换成列表赋值给li print(li) # {33, 11, 44, 22, 55}
集合的创建:
set1 = set({1,2,\'guqingqiu\'}) print(set1,type(set1)) # {\'guqingqiu\', 1, 2} <class \'set\'>
集合的 增 :
add update
set1 = {\'顾清秋\',\'懒笨呆\'} set1.add(\'guqingqiu\') print(set1) # {\'顾清秋\', \'懒笨呆\', \'guqingqiu\'} set1.update(\'abc\')print(set1) # {\'懒笨呆\', \'b\', \'顾清秋\', \'a\', \'guqingqiu\', \'c\'}
集合的 删 :
remove() 指定元素删除
set1 = {\'顾清秋\',\'懒笨呆\'} set1.remove(\'顾清秋\') print(set1) # {\'懒笨呆\'}
pop() 随机删除
set1 = {\'顾清秋\',\'懒笨呆\'} print(set1 .pop()) #有返回值 print(set1) # 懒笨呆 # {\'顾清秋\'}
clear 清空集合
set1 = {\'顾清秋\',\'懒笨呆\'} set1.clear() print(set1) #set() #空集合
del 直接删除集合。
集合的 查
用 for 循环查看
set1 = {\'顾清秋\',\'懒笨呆\'} for i in set1: print(i) # 顾清秋 # 懒笨呆
集合的 交集 :
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 & set2) print(set1.intersection(set2)) # {4, 5} # {4, 5}
集合的 反交集 :
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2) print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8} # {1, 2, 3, 6, 7, 8}
集合的 并
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2) print(set1.union(set2)) # {1, 2, 3, 4, 5, 6, 7, 8} # {1, 2, 3, 4, 5, 6, 7, 8}
集合的 差集 :
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2)#哪个集合在前面打印的就是哪个集合多出来的 print(set2 - set1) # {1, 2, 3} # {8, 6, 7}
集合的 子集 :
set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1.issubset(set2)) #子集 print(set2.issuperset(set1)) #set2 是 set1的超集 # True # True
集合的 冻集合 :
frozenset() 将集合转换成不可变类型
set1 = {\'顾清秋\',\'懒笨呆\'} set2 = frozenset(set1) print(set2,type(set2)) # frozenset({\'顾清秋\', \'懒笨呆\'}) <class \'frozenset\'>
对于赋值运算,指向的是同一个内存地址。字典,列表,集合都一样。
l1 = [1,2,3] l2 = l1 l2.append(111) print(l1,l2) # [1, 2, 3, 111] [1, 2, 3, 111]
浅 copy() 第一层创建的是新的内存地址,但是第二层开始,指向的都是同一个内存地址,所以对于第二层以及更深的层数来说,将会保持一致性。
l1 = [1,2,[1,2,3],4] l2 = l1.copy() l1[2].append(666) print(l1[2]) print(l2[2]) print(l1,id(l1[2])) print(l2,id(l2[2]))
# [1, 2, 3, 666]
# [1, 2, 3, 666] # [1, 2, [1, 2, 3, 666], 4] 1872001973960 # [1, 2, [1, 2, 3, 666], 4] 1872001973960
deep.copy()
对于深 copy来说,两个是完全独立的,改变任意一个任何元素(无论多少层),另一个绝对不改变。
import copy #调用copy库 l1 = [1,2,[1,2,3],4] l2 = copy.deepcopy(l1) l1[2].append(666) print(l1,l2) print(id(l1[2]),id(l2[2])) # [1, 2, [1, 2, 3, 666], 4] [1, 2, [1, 2, 3], 4] # 1803667445192 1803667444808
切片赋值 一个改变另一个随之改变 第一层的id 内存位置不同,但子层id一致。类似于浅copy().
l1 = [1,2,3,[22,33]] l2 = l1[:] l1[3].append(666) print(l1) print(l2) # [1, 2, 3, [22, 33, 666]] # [1, 2, 3, [22, 33, 666]]
==================================
s = \'guqingqiu\' s1 = s.encode(\'utf-8\') #unicode ---> utf-8 编码 print(s1) s3 = s1.decode(\'utf-8\') # utf-8 ---> unicode 解码 print(s3) # b\'guqingqiu\' # guqingqiu
utf -8 转成 gbk
s = \'老男孩\' s1 = s.encode(\'gbk\') #unicode ---> gbk print(s1) s2 = s1.decode(\'gbk\').encode(\'utf-8\') # gbk -->unicode-->utf-8 print(s2) # b\'\\xc0\\xcf\\xc4\\xd0\\xba\\xa2\' # b\'\\xe8\\x80\\x81\\xe7\\x94\\xb7\\xe5\\xad\\xa9\'
以上是关于python's seventh day for me的主要内容,如果未能解决你的问题,请参考以下文章
Python之路,Day14 - It's time for Django
python's thirty day for me 异常处理
python's sixth day for me 员工信息表