一、数据类型补充
1、str
# 1、casefold # 用法:S.casefold() # 意义:lower() 方法只对ASCII编码,也就是‘A-Z’有效,对于其他语言(非汉语或英文)中把大写转换为小写的情况只能用 casefold() 方法 # 用法: s = 'aBBex ' print(s.casefold()) #abbex # 2、expandtabs # 用法:S.expandtabs(tabsoze=8) # 意义:把字符串中的 tab 符号(' ')转为空格,tab 符号(' ')默认的空格数是 8。 # 从头开始数,数到第一个 正好为8个空格,不足则补空格,如果还有 ,接着从第一个 数到第二个 仍然为8个空格,以此类推直到最后一个 结束。 # 用法 S = "this is string example....wow!!!" print("原始字符串: " + S) #原始字符串: this is string example....wow!!! print("替换 \t 符号: " + S.expandtabs()) #替换 符号: this is string example....wow!!! print("使用16个空格替换 \t 符号: " + S.expandtabs(16)) #使用16个空格替换 符号: this is string example....wow!!!
2、元组
对于元组:如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型
tu = (1) tu1 = (1,) print(tu,type(tu)) #1 <class 'int'> print(tu1,type(tu1)) #(1,) <class 'tuple'> tu = ('老男孩') tu1 = ('老男孩',) print(tu,type(tu)) #老男孩 <class 'str'> print(tu1,type(tu1)) #('老男孩',) <class 'tuple'> tu = ([1,2,3]) tu1 = ([1,2,3],) print(tu,type(tu)) #[1, 2, 3] <class 'list'> print(tu1,type(tu1)) #([1, 2, 3],) <class 'tuple'>
3、list
对于list,在循环一个列表时,最好不要进行删除的动作(一旦删除,索引会随之改变),容易出错。 55]
# li = [11,22,33,44,55] # 将索引为奇数的元素删除。 li = [11,22,33,44,55] # del li[1::2] # print(li) #[11, 33, 55] ll = [] for i in range(len(li)): if i%2 == 0: ll.append(li[i]) li = ll print(li) #[11, 33, 55]
li = [11,22,33,44,55] # for i in range(len(li)): # print(li) # [11, 22, 33, 44, 55] [11, 22, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44] # print(i) # 0 1 2 3 4 # if i % 2 == 1: # del li[i] # print(li) # [11, 22, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44] [11, 33, 44] # print(i) # 0 1 2 3 4 # print(li) # list assignment index out of range # del li[100] # list assignment index out of range # for i in li: # print(li) # li.remove(i) # print(li) # print(li) # for i in range(len(li)-1,-1,-1): # if i % 2 == 1: # del li[i] # print(li)
4、dict
#Python 字典(Dictionary) fromkeys() 函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值 #dict.fromkeys(seq[, value])) dic = dict.fromkeys('abc','alex') print(dic) #{'c': 'alex', 'a': 'alex', 'b': 'alex'} dic = dict.fromkeys([1,2,3],[]) print(dic) #{1: [], 2: [], 3: []} dic[1].append('laonanhai') print(dic) #{1: ['laonanhai'], 2: ['laonanhai'], 3: ['laonanhai']}
dic = {'k1':'value1','k2':'value2','name':'wusir'} # 将字典中含有k元素的键,对应的键值对删除。 # 在循环字典中,不能增加或者删除此字典的键值对。 # dictionary changed size during iteration # for i in dic: # if 'k' in i: # del dic[i] # count = 0 # for i in dic: # dic[i+str(count)] = dic[i] # count += 1 # l1 = [] # for i in dic: # if 'k' in i: # l1.append(i) # # for i in l1: # del dic[i] # print(dic)
二、集合set
数据类型set:不重复,无序,它里面的元素是可哈希的。他本身是不可哈希的,他不能作为字典的key。
作用:1,去重。
2,数据关系的测试。
# 去重 li = [11,11,22,22,33,33,33,44] li = list(set(li)) print(li) #[33, 11, 44, 22] set = {11,22,33,11,22,33,44} print(set) #{33, 11, 44, 22} # 增 set1 = {'alex','wusir','ritian','egon','barry'} set1.add('sb') print(set1) #{'sb', 'barry', 'egon', 'ritian', 'wusir', 'alex'} set1.update('abc') set1.update([1,2,3]) #迭代的增加 print(set1) #{'sb', 1, 2, 3, 'barry', 'egon', 'ritian', 'a', 'b', 'wusir', 'alex', 'c'} # 删 set1.remove('sb') print(set1) #{'c', 1, 2, 'ritian', 'wusir', 3, 'barry', 'b', 'a', 'alex', 'egon'} set1.clear() print(set1) #set() del set1 # print(set1) #删除了 set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} # 交集 & intersection print(set1 & set2) #{4, 5} print(set1.intersection(set2)) #{4, 5} # 反交集 ^ symmetric_difference print(set1^set2) #{1, 2, 3, 6, 7, 8} print(set.symmetric_difference(set2)) #{1, 2, 3, 6, 7, 8} #差集 | union print(set1 | set2) #{1, 2, 3, 4, 5, 6, 7, 8} print(set1.union(set2)) #{1, 2, 3, 4, 5, 6, 7, 8} set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1.issubset(set2)) #True 子集 print(set2.issuperset(set1)) #True set2 是set1的超集 set1 = {'barry',"wusir"} set2 = frozenset(set1) #把集合变成可哈希的,有序集合 print(set2,type(set2)) #frozenset({'barry', 'wusir'}) <class 'frozenset'>
三、copy
l1 = [1,2,3] l2 = l1 l2.append(111) # print(l1,l2) print(id(l1)) #2682785139272 print(id(l2)) #2682785139272 # 对于赋值运算,指向的是同一个内存地址。字典,列表,集合都一样。 s = 1000 s1 = s print(id(s)) #2682776128688 print(id(s1)) #2682776128688
l1 = [1,2,3] l2 = l1 l2.append(111) # print(l1,l2) print(id(l1)) #2682785139272 print(id(l2)) #2682785139272 # 对于赋值运算,指向的是同一个内存地址。字典,列表,集合都一样。 s = 1000 s1 = s print(id(s)) #2682776128688 print(id(s1)) #2682776128688 #copy 不是指向一个,在内存中开辟了一个内存空间 #对于浅copy来说,第一层创建的是新的内存地址, # 而从第二层开始,指向的都是同一个内存地址, # 所以,对于第二层以及更深的层数来说,保持一致性。 # l1 = [1,2,3] # l2 = l1.copy() # l1.append(111) # print(id(l1),id(l2)) l1 = [1,2,[1,2,3,[22,33,44]],4] l2 = l1.copy() # l1[2].append(666) print(l1) #[1, 2, [1, 2, 3, [22, 33, 44]], 4] print(l2) #[1, 2, [1, 2, 3, [22, 33, 44]], 4] print(id(l1)) #1603100643016 print(id(l2)) #1603100738056 #deep.copy # 对于深copy来说,两个是完全独立的, # 改变任意一个的任何元素(无论多少层),另一个绝对不改变. import copy l1 = [1, 2, [1, 2, 3], 4] l2 = copy.deepcopy(l1) l1[2].append(666) print(l1,l2) #[1, 2, [1, 2, 3, 666], 4] [1, 2, [1, 2, 3], 4] print(id(l1[2]),id(l2[2])) #print(id(l1[2]),id(l2[2])) # l1 = [1,2,3] l2 = l1 l2.append(111) print(l1,l2) #[1, 2, 3, 111] [1, 2, 3, 111] l1 = [1,2,3,[22,33]] l2 = l1[:] l1[3].append(666) print(l2) # [1, 2, 3, [22, 33, 666]] l1 = [1,2,3,] l2 = l1[:] l1.append(666) print(l2) #[1, 2, 3]
四、编码的补充
s = 'alex' s1 = s.encode('utf-8') # unicode ---> utf-8 编码 s3 = s1.decode('utf-8') # utf-8 ---> unicode 解码 print(s3) # s = 'alex' # s1 = s.encode('gbk') # unicode ---> gbk 编码 # s3 = s1.decode('gbk') # gbk ---> unicode 解码 # print(s3) #gbk ---> utf-8 # s = 'alex' # s1 = s.encode('gbk') # print(s1) # # s2 = s1.decode('gbk').encode('utf-8') # print(s2) s = '老男孩' s1 = s.encode('gbk') print(s1) #b'xc0xcfxc4xd0xbaxa2'
s2 = s1.decode('gbk').encode('utf-8') #b'xe8x80x81xe7x94xb7xe5xadxa9' print(s2)