Python基础六(小数据池、编码进阶)

一、练习试题

元素分类
有如下值li= [11,22,33,44,55,66,77,88,99,90],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
方法一、
li= [11,22,33,44,55,66,77,88,99,90]
dic={'k1':[],'k2':[]}
for i in li:
    if i > 66:
        dic['k1'].append(i)
    elif i <66:
        dic['k2'].append(i)
print(dic)
方法二、
li= [11,22,33,44,55,66,77,88,99,90]
dic={}
for num in li:
    dic.setdefault('k1',[])
    dic.setdefault('k2',[])
    if num > 66:
        dic['k1'].append(num)
    elif num < 66:
        dic['k2'].append(num)
    else:
        continue
print(dic)

 

二、小知识点补充

1、id  查询内存地址

name = 'alex'
print(id(name))
li = [1,2,3]
print(id(li))

  

2、is  判断的是内存地址

==是比较值,is 是内存地址是否相同

name1 = 'alex@'
name2 = 'alex@'
print(name1 == name2)---Ture
print(name1 is name2)-----Ture

  

3、小数据池

Python中   int  与 str  存在小数据池,其他类型没有

int 范围  -5 ---256---指向一个内存地址

str 如果是全部由字母组成的字符串 都是指向一个内存地址.

如果是数字与str(单个字母)想乘,则20以内(包含20)的是同一个内存地址.

其他数据类型 则没有小数据池概念.

三、编码进阶

1、编码回顾

unicode :万国码
A : 0000 0001 0000 0001 0000 0001 0000 0001 32位
中: 0000 0101 0000 0001 0000 0001 0000 0001 32位

升级:utf-8 :用最少8位表示一个字符
A : 0000 0001 8位
欧洲 : 0000 0001 0000 0001 16位
亚洲 中 : 0000 0101 0000 0001 0000 0001 24位

gbk :国标
a : 0000 0001 8位
中 : 0000 0101 0000 0001 16位


1,不同编码之间是不能互相识别对方的二进制,会报错,或者产生乱码.
2,在你的字符串(文件),存储,传输时,必须使用非unicode的二进制(01010101).
py3:
字符串:编码方式(在内存中的运行方式):默认都是unicode.

2、byte 表现形式

byte
对于非中文:  表现形式: b'alex'
      内部编码: utf-8 gbk,gb2312...(非unicode) 你设定的.

对于中文: 表现形式: b'xe3\xf2\x36\xe3\xf2\x36\'
      内部编码: utf-8 gbk,gb2312...(非unicode) 你设定的.

str
对于非中文:   表现形式: 'alex'
      内部编码: unicode
对于中文:   表现形式: '中国'
     内部编码: unicode

str >>> byte  

b = s.encode('utf-8')

s = 'alex'
b = s.encode('utf-8')
b1 = s.encode('gbk')
print(s,type(s))-----alex <class 'str'>
print(b,type(b))-----b'alex' <class 'bytes'>
print(b1,type(b1))--b'alex' <class 'bytes'>

  

s = '中国'
b = s.encode('utf-8')
b1 = s.encode('gbk')
print(s,type(s))
print(b,type(b))------b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>
print(b1,type(b1))----b'\xd6\xd0\xb9\xfa' <class 'bytes'>

 

posted @ 2018-01-29 19:41  GuoXY  阅读(122)  评论(0编辑  收藏  举报