bianma


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:

例:by = '晓'

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)    # False
s = 'ssssssssssssssssssssssssssssssss'
r = 'ssssssssssssssssssssssssssssssss'
print(s is r)    # True

数字(-5 ~ 256)和字符串相同(id相同)

s1 = 'sunv'
s2 = 'sunv'
print(s1 == s2)    # True
print(s1 is s2)    # True

列表,字典,元组,set  的 id 都不同

l1 = [1,2,3]
l2 = [1,2,3]
print(l1 == l2)       # True
print(id(l1),id(l2))  # 35634632 35633480
print(l1 is l2)       # False

对于 int   小数据池

范围:-5   ~  256 (都含),创建相同的数字,都指向同一个内存地址

i = 6
j = 6
print(i is j)   # True
i = 258
j = 258
print(i is j)    # False
i = -5
j = -5
print(i is j)    # True

将li = [11,22,33,44,55]

把li中奇数位删除:

方法一:

del li[1:2]   # 1
print(li)
li = li[0::2]  # 1
print(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)  # 删除元素:1

set.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 = l1
l1.append('barry')
print(l1)   # [1, 2, 3, 'barry']
print(l2)   # [1, 2, 3, 'barry']
字典:

dic = {'name':'barry'}
dic1 = dic
dic['age'] = 18
print(dic)     # {'name': 'barry', 'age': 18}
print(dic1)     # {'name': 'barry', 'age': 18}
字符串:(不可变)还有数字

s = 'alex'
s1 = s
s3 = 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 38387144
print(l2,id(l2),id(l2[1]))  # [1,[22,33,44,'55'],3,4] 38408392 38387144

deepcopy(深拷贝):

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变

import copy
l1 = [1,[22,33],5,6]
l2 = copy.deepcopy(l1)
l1[0] = 111
print(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](深拷贝不变)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值