bianma
来源:互联网 发布:软件开发培训技术学校 编辑:程序博客网 时间:2024/06/04 18:59
py3中字符串默认的是Unicode(列表及其他不是)
Unicode:A:四字节
中:四字节
utf-8 : A :一字节
欧洲:两字节
中:三字节
gbk : A :一字节
中:两字节
①不同编码之间是不能相互识别,会产生乱码
②存储,传输的是 utf-8、gbk、或者gb2312等(不可能是Unicode)所以需要转换:
py3 中的 str 和 bytes
为啥不直接用bytes :因为bytes的表现形式是十六进制
表现形式:bytes s = b'sunv' 内部存储:(utf-8,gbk等) 00101000001010100
中文:b'\xe6\x99\x93'
表现形式:str s = 'sunv' 内部存储:(Unicode) 0100100101001010
bytes:
print(by.encode('utf-8'))
其形式为:b'\xe6\x99\x93'(十六进制)
print(by.encode('gbk'))
其形式为:b'\xcf\xfe'(十六进制)
str (Unicode) ---> bytes(utf-8,gbk) ---> 硬盘存储或传输
(-------忘了要问啥 ----)
补充:
Unicode 因为是万国码,所以可以和任何形式(utf-8,gbk等)编码方式转化,
gbk和utf-8转化必须借助Unicode。
---------------------------------------------------------------
# 枚举 enumerate(str,list,tuple,dict,set(都可以)) dict:枚举键
li = ['one','two','there']for i in enumerate(li,1): print(i) # (1, 'one') \n (2, 'two') \n (3, 'there')
=========================================================================
关于id 、(is 和 ==)
字符串 若没有空格,没有特殊字符,id相同
s = 'poi kl'r = 'poi kl'print(s is r) # Falses = 'ssssssssssssssssssssssssssssssss'r = 'ssssssssssssssssssssssssssssssss'print(s is r) # True
数字(-5 ~ 256)和字符串相同(id相同)
s1 = 'sunv's2 = 'sunv'print(s1 == s2) # Trueprint(s1 is s2) # True
列表,字典,元组,set 的 id 都不同
l1 = [1,2,3]l2 = [1,2,3]print(l1 == l2) # Trueprint(id(l1),id(l2)) # 35634632 35633480print(l1 is l2) # False
对于 int 小数据池
范围:-5 ~ 256 (都含),创建相同的数字,都指向同一个内存地址
i = 6j = 6print(i is j) # Truei = 258j = 258print(i is j) # Falsei = -5j = -5print(i is j) # True
将li = [11,22,33,44,55]
把li中奇数位删除:
方法一:
del li[1:2] # 1print(li)li = li[0::2] # 1print(li)方法二
li = [11,22,33,44,55] 方法二for i in range(0,len(li)//2): del li[i+1]print(li)
方法三
for i in range(len(li)-1,0,-1): if 1 % 2 == 1: del li[i]print(li)
集合set:
增:(2)
add:
set1 = {1,'sunv',(1,2)}set1.add('hello')print(set1) # ##{(1, 2), 1, 'hello', 'sunv'}update:(迭代添加)
set1.update('别话')print(set1) # ##{'sunv', 1, (1, 2), '话', '别'}删(4):
set1.remove(1) # 删除元素:1set.pop() # 随机删一个元素且有返回值set1.clear() # 清空集合del set # 删除集合无改
查(只能for 循环查):
for i in set1: print(i)
# set = {1,'sunv',[1,2,3]} # 报错# set = {1,'sunv',{2,3}} # 报错# set = {1,'sunv',(1,2[2,3,4])} # 报错
list1 = [1,1,2,3,4,5,5]set1 = set(list1)print(set1) # {1, 2, 3, 4, 5}
交集。(& 或者 intersection)
set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 & set2) # {4, 5}print(set1.intersection(set2)) # {4, 5}并集。(| 或者 union)
set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7}print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7}差集。(- 或者 difference)set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 - set2) # {1, 2, 3}print(set1.difference(set2)) # {1, 2, 3}反交集。 (^ 或者 symmetric_difference)
set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}子集与超集
set1 = {1,2,3}set2 = {1,2,3,4,5,6}print(set1 < set2)print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。print(set2 > set1)print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。frozenset不可变集合,让集合变成不可变类型。
s = frozenset('barry')print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>
-----------------------------------------------------------------------------------------------------------------------------------
关于copy
列表:
l1 = [1,2,3]l2 = l1l1.append('barry')print(l1) # [1, 2, 3, 'barry']print(l2) # [1, 2, 3, 'barry']
字典:dic = {'name':'barry'}dic1 = dicdic['age'] = 18print(dic) # {'name': 'barry', 'age': 18}print(dic1) # {'name': 'barry', 'age': 18}字符串:(不可变)还有数字
s = 'alex's1 = ss3 = s.replace('e','E')print(s,s1,s3) # alex alex alEx
copy(浅拷贝):
不嵌套时,不随之改变!
l1 = [1,[22,33,44],3,4]l2 = l1.copy()l1[1].append('55')print(l1,id(l1),id(l1[1])) # [1,[22,33,44,'55'],3,4] 38385992 38387144print(l2,id(l2),id(l2[1])) # [1,[22,33,44,'55'],3,4] 38408392 38387144
deepcopy(深拷贝):
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变
import copyl1 = [1,[22,33],5,6]l2 = copy.deepcopy(l1)l1[0] = 111print(l1,l2) # [111,[22,33],5,6] [1,[22,33],5,6](深拷贝不变)l1[1].append('barry')print(l1,l2) # [111,[22,33,'barry'],5,6] [1,[22,33],5,6](深拷贝不变)