day7 转码 enumerate枚举 循环里面的坑 数据类型之间的转化 集合 深浅copy

概览:
    转码
    enumerate枚举
    循环里面的坑
    数据类型之间的转化
    集合
    深浅copy


#第一部分 转码
#gbk 与 utf-8之间的转换

#gbk形式的bytes
-->decode('gbk')-->
unicode str字符串
-->encode('utf-8')-->
utf8形式的bytes


#utf8形式的bytes
# -->encode('utf-8')-->
#unicode str字符串
# -->encode('gbk')-->
#gbk形式的bytes


s1 = '我爱北京天安门'
b1 = s1.encode('GB18030') #以GB18030形式编码
print(b1)

  

s2 = b1.decode('gbk') #把b1解码 请记住  编码与解码的形式必须相同
print(s2,type(s2))

#已知
#b1 = b'\xce\xd2\xb0\xae\xb1\xb1\xbe\xa9\xcc\xec\xb0\xb2\xc3\xc5'
#是以GB18030编码形式编码的bytes数据
#请将其转化成str
b1 =  b'\xce\xd2\xb0\xae\xb1\xb1\xbe\xa9\xcc\xec\xb0\xb2\xc3\xc5'
s1 = b1.decode('GB18030')
print(s1)

  



#已知
#b1 = b'\xce\xd2\xb0\xae\xb1\xb1\xbe\xa9\xcc\xec\xb0\xb2\xc3\xc5'
#是以GB18030编码形式编码的bytes数据
#请将其转化成utf-8编码形式的bytes数据
b1 =  b'\xce\xd2\xb0\xae\xb1\xb1\xbe\xa9\xcc\xec\xb0\xb2\xc3\xc5'
s1 = b1.decode('GB18030')
b2 = s1.encode('utf-8')
print(b2)
print(b2.decode('utf-8'))

  

b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
我爱北京天安门

  


#非unicode编码的数据 如果是
#英文 数字 特殊字符可以相互转化 他们引用的都是ASICC
s1 = 'alex taibai'
b1 = s1.encode('gbk')
print(b1.decode('GB18030'))

  

alex taibai

  



#第二部分 enumerate枚举
#enumerate(可迭代对象,起始编号)
goods = [
     {"name": "电脑", "price": 1999},
     {"name": "鼠标", "price": 10},
     {"name": "游艇", "price": 20},
     {"name": "美女", "price": 998}]
for i in enumerate(goods,100):
    print(i)

 -->

(100, {'name': '电脑', 'price': 1999})
(101, {'name': '鼠标', 'price': 10})
(102, {'name': '游艇', 'price': 20})
(103, {'name': '美女', 'price': 998})
goods = [
     {"name": "电脑", "price": 1999},
     {"name": "鼠标", "price": 10},
     {"name": "游艇", "price": 20},
     {"name": "美女", "price": 998}]
for index,item in enumerate(goods,10):
    print(index,item['name'],item['price'])

  

10 电脑 1999
11 鼠标 10
12 游艇 20
13 美女 998

  

#format()标准化输出
#print(变量1,变量2,变量3)
#print('{}{}{}'.format(变量1,变量2,变量3))
goods = [
     {"name": "电脑", "price": 1999},
     {"name": "鼠标", "price": 10},
     {"name": "游艇", "price": 20},
     {"name": "美女", "price": 998}]
for index,item  in enumerate(goods,100):
    print('编号:{},\t名称:{},\t价格:{}'.format(index,item['name'],item['price']))

  

编号:100,	名称:电脑,	价格:1999
编号:101,	名称:鼠标,	价格:10
编号:102,	名称:游艇,	价格:20
编号:103,	名称:美女,	价格:998

 

#元组里面的坑

#元组里面只有一个元素 且没有,
#那么这个元组的数据类型 与这个唯一的数据元素 的数据类型相同
tu1 = (1)
tu2 = ('a')
print(tu1,type(tu1))
print(tu2,type(tu2))
1 <class 'int'>
a <class 'str'>
tu1 = (1,)
tu2 = ('a',)
print(tu1,type(tu1))
print(tu2,type(tu2))

 

(1,) <class 'tuple'>
('a',) <class 'tuple'>

#列表可以直接相加 拼接
l1 = [1,2,3]
l2 = ['alex','wusir']
print(l1+l2)

  

'''[1, 2, 3, 'alex', 'wusir']'''
#for循环里面的坑
#将列表中 索引为奇数的元素 从列表中删除
#在循环使用一个列表的时候,最好不要对此列表进行改变大小的操作 比如 增加元素 删除元素

#方法一
li = [11,22,33,44,55,66,77,88]
del li[1::2]
print(li)

  


#方法二 将删除后剩下的元素装入一个新的 列表
li = [11,22,33,44,55,66,77,88]
list1 = []
for i in li :
    if li.index(i) % 2 == 0:
        list1.append(i)
li = list1
print(li)

  

#方法三
#从后往前删除
li = [11,22,33,44,55,66,77,88]
for  i in range(len(li)-1,-1,-1):
    if i % 2 == 1:
        li.pop(i)
print(li)

 #创建字典的三种方式

#方式1 直接创建
#dic = {'name':alex,'age':18,'job':it}

#方式二 根据定义创建
#dic= dict({’name':'alex})

#方式三 通过keys创建
dic1 = dict.fromkeys(['a','b','c'],[])
print(dic1)
dic1['a'].append('wusir')
print(dic1['a'])
print(dic1['b'])
print(dic1['c'])
print(id(dic1['a']))
print(id(dic1['b']))
print(id(dic1['c']))#指向的是同一个地址

  

{'a': [], 'b': [], 'c': []}
['wusir']
['wusir']
['wusir']
415105793544
415105793544
415105793544

 #for 循环在 字典应用中的坑

#删除key中含有看的键值对
dic = {'key1':'value1','key2':'value2','key3':'value3','k':'v'}
for i in dic:
    if 'k' in i :
        dic.pop(i)
print(dic)
  '''dictionary changed size during iteration'''

  


#创建一个新的列表 把含有k的key 装进这个列表 循环这个列表
dic = {'key1':'value1','key2':'value2','key3':'value3','a':'v'}
li = []
for i in dic:
    if 'k' in i:
        li.append(i)
print(li)
for i in li:
    if 'k' in i :
        dic.pop(i)
print(dic)

  #第四部分

#数据类型之间的转化
#str字符串 ---> 列表

#很重要 很重要 很重要
s1 = 'alex wusir taibai'
li = s1.split()
print(li)

  

['alex', 'wusir', 'taibai']

  


#很重要 很重要 很重要
#列表 --> str
li = ['alex', 'wusir', 'taibai']
s1  =''.join(li)#千万记住''放在前面
print(s1)
s2  =' '.join(li)#千万记住''放在前面
print(s2)
s3  ='*'.join(li)#千万记住''放在前面
print(s3)

  

alexwusirtaibai
alex wusir taibai
alex*wusir*taibai

  



#元组tuple --> list
'''tu1 = (1, 2, 3)
li = list(tu1)
print(li)'''
'''-->[1, 2, 3]'''

#元组 list--> tuple
'''li = [1, 2, 3]
tu = tuple(li)
print(tu)'''
'''(1, 2, 3)'''

#字典 --> list
'''dic = {'name':'alex','age':18}
li = list(dic)
print(li)'''
'''['name', 'age']'''#只输出了 key 因为字典里面实际存储的的也就是 key 数据存放的只是数据的地址

#集合
#set
#表现形式:{'alex',1,2}
#集合里面的数据必须是不可变的类型
#但是集合本身是可变的 数据类型
#集合里面的元素不重复 天然的去重
#集合里面的元素是无序的
#集合 不要与字典搞混了

#集合的创建
'''set1 = {1,2,'alex'}
set2 = set({2,3,'wusir'})'''

#集合的增
'''set2 = set({2,3,'wusir'})
set2.add('女神')
set2.update('中国')#逐个添加 itearable
print(set2)'''

#集合的删除
#set1 = {'alex','wusir','ritian','egon','barry'}
#set1.remove('alex')#按照元素的值删除
#set1.pop()#随机删除
#clear set1 #清空元素
#del set1 删除集合

#集合的运算

#交集 & 或者 intersection
'''set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
#print(set1 & set2)
print(set1.intersection(set2))'''
'''{4, 5}'''
#并集 | 或者 union
'''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}'''

#差集 - 或者different
'''set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1-set2)
print(set1.difference(set2))'''
'''{1, 2, 3}
{1, 2, 3}'''

#反交集
#^ symmetric_diffreence
'''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}'''

#子集 超集
'''set1 = {1,2,3}
set2 = {1,2,3,4,5,6,7,8}
print(set1 < set2)
print(set1.issubset(set2))'''
'''True
True
'''
#冻结集合frozenset
#让集合编程不可变得数据类型
#编程不可变的数据类型之后 可以作为字典的 key
set1 = frozenset({1,2,3})
print(set1,type(set1))
dic = dict.fromkeys(set1,'alex')
print(dic)

  

frozenset({1, 2, 3}) <class 'frozenset'>
{1: 'alex', 2: 'alex', 3: 'alex'}

  



#第六部分 深浅copy


#浅copy
#对于浅copy 第一层在内存中是相互独立的
#重第二层开始 以及更深的层数使用的都是统一个地址 一变全变
l1 = [1,2,3,[22,]]
l2 = l1.copy()
l1[-1].append('美女')
print(l2,l1)
print(id(l1),id(l2))
print(id(l1[-1]),id(l2[-1]))

  

[1, 2, 3, [22, '美女']] [1, 2, 3, [22, '美女']]
405133639176 405135686984 #地址不相同 说明第一层是相互独立的 存放在不同的地址
405148567432 405148567432#地址相同 说明第二层 存放在相同的地址

  



#深copy
#copy之后的文件 是与原文件事相互独立的 互不影响
import  copy
l1 = [1,2,3,[22,]]
l2 = copy.deepcopy(l1)
l1[-1].append('美女')
l1.append(666)
print(l1)
print(l2)

  

[1, 2, 3, [22, '美女'], 666]
[1, 2, 3, [22]]#l1做任何更改 第一层 第二层 的更改 都不会影响 l2

#应用场景
#完全独立的备份 与原数据没有关系的 copy 深copy
#一份数据在第二层 列表的第二层 与元数据进行公用 浅 copy































猜你喜欢

转载自www.cnblogs.com/cavalier-chen/p/9457348.html
今日推荐