python_003_基础
本节内容
1. bytes
2. 三元运算
3. 进制
4. 列表操作
5. 元组
6. 字符串操作
7. 字典操作
bytes
在Python3以后,字符串和bytes类型彻底分开了。字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的。
bytes数据类型在所有的操作和使用甚至内置方法上和字符串数据类型基本一样,也是不可变的序列对象。
bytes对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。Python3中,bytes通常用于网络数据传输、二进制图片和文件的保存等等。可以通过调用bytes()生成bytes实例,其值形式为 b'xxxxx',其中 'xxxxx' 为一至多个转义的十六进制字符串(单个 x 的形式为:\x12
,其中\x为小写的十六进制转义字符,12为二位十六进制数)组成的序列,每个十六进制数代表一个字节(八位二进制数,取值范围0-255),对于同一个字符串如果采用不同的编码方式生成bytes对象,就会形成不同的值.
b = b'' # 创建一个空的bytes b = byte() # 创建一个空的bytes b = b'hello' # 直接指定这个hello是bytes类型 b = bytes('string',encoding='编码类型') #利用内置bytes方法,将字符串转换为指定编码的bytes b = str.encode('编码类型') # 利用字符串的encode方法编码成bytes,默认为utf-8类型 bytes.decode('编码类型'):将bytes对象解码成字符串,默认使用utf-8进行解码。
对于bytes,我们只要知道在Python3中某些场合下强制使用,以及它和字符串类型之间的互相转换,其它的基本照抄字符串。
简单的省事模式:
string = b'xxxxxx'.decode()
直接以默认的utf-8编码解码bytes成string
b = string.encode()
直接以默认的utf-8编码string为by
三元运算
result = 值1 if 条件 else 值2
如果条件为真: result = 值1
如果条件为假: result = 值2
进制
- 二进制,01
- 八进制,01234567
- 十进制,0123456789
- 十六进制,0123456789ABCDEF 二进制到16进制转换http://jingyan.baidu.com/album/47a29f24292608c0142399cb.html?picindex=1
计算机内存地址和为什么用16进制? 为什么用16进制 1、计算机硬件是0101二进制的,16进制刚好是2的倍数,更容易表达一个命令或者数据。十六进制更简短,
因为换算的时候一位16进制数可以顶4位2进制数,也就是一个字节(8位进制可以用两个16进制表示) 2、最早规定ASCII字符集采用的就是8bit(后期扩展了,但是基础单位还是8bit),8bit用2个16进制直接就能表达出来,
不管阅读还是存储都比其他进制要方便 3、计算机中CPU运算也是遵照ASCII字符集,以16、32、64的这样的方式在发展,因此数据交换的时候16进制也显得更好 4、为了统一规范,CPU、内存、硬盘我们看到都是采用的16进制计算 16进制用在哪里 1、网络编程,数据交换的时候需要对字节进行解析都是一个byte一个byte的处理,1个byte可以用0xFF两个16进制来表达。
通过网络抓包,可以看到数据是通过16进制传输的。 2、数据存储,存储到硬件中是0101的方式,存储到系统中的表达方式都是byte方式 3、一些常用值的定义,比如:我们经常用到的html中color表达,就是用的16进制方式,4个16进制位可以表达好几百万的颜色信息。
列表操作
列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
定义列表
names=['Alex',"Tenglan",'Eric']
通过下标访问列表中元素,下表从0开始
print(names[0])
Alex
切片:取多个元素
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] print(names[1:4]) #取下标1至下标4之间的数字,包括1,不包括4 print(names[1:-1]) #取下标1至-1的值,不包括-1 print(names[0:3]) print(names[:3])#如果从头开始取,0可以忽略,跟上句效果一样 print(names[3:])#如果想取最后一个,不能写-1,只能这么写 print(names[-3:-1])#从倒数第3个到倒数第1个,不包含倒数第一个 print(names[-3:])#从倒数第3个到最后一个,头尾都包括 print(names[::2]) #2表示步长
追加
names.append("我是新来的") #添加到末尾处 print(names)
插入
names.insert(2,"强行从Eric前面插入") names.insert(4,"从Eric后面插入试试新姿势") print(names)
修改
names[2]='该换人了' print(names)
删除
del names[2] #删除指定下标位置的元素 print(names) names.remove("Alex") #删除指定元素 print(names) names.pop() #删除列表最后一个元素 print(names) names.pop(1)#删除指定下标位置的元素,与del names[1]相同 print(names)
扩展
b=[1,2,3] names.extend(b) #将b中的元素依次添加到names中 print(names)
拷贝
names.insert(0,[3,2,1]) name_copy=names.copy() #浅拷贝 name_copy[0][0]=5 #两个列表中的元素都被改动 print(names,name_copy) import copy name_copy=copy.copy(names) #也是浅拷贝 name_copy=copy.deepcopy(names) #深拷贝 name_copy[0][0]=3 #name_copy被改动,names没有被改动 print(names,name_copy)
统计
names[2]="Tenglan" print(names) print(names.count("Tenglan"))#统计列表中“Tenglan”元素的个数
排序和翻转
names2=names[1:6] names2.sort()#排序 print(names2) names2.reverse()#反转 print(names2)
获取下标和清空列表
print(names2.index("Tenglan")) names2.clear() print(names2)
元组
元组其实跟列表差不多,也是存一组数,只不过元组一旦创建,便不能再修改,所以又叫只读列表
定义元组
names=("alex","jack","eric")
元组只有两个方法,count和index
字符串操作
字符串特性:不可修改
name = "my \tname is {name} and i am {year} old" print(name.capitalize())# 得到一个首字符大写的新字符串 print(name.count("a"))#统计字符串中字符“a”的个数 print(name.center(50,"-"))#得到一个长度为50的新字符串,不够用"-"补全,并将原字符串至于新字符串中间 print(name.endswith("ex"))#判断结尾字符串 print(name.expandtabs(tabsize=30))#将“\t”转变为30个“ ” print(name.find("name"))#得到name字符开始出现的下标 print(name[name.find("name"):])#字符串也可以用切片 print(name.format(name='alex',year=23))#格式化输出 print(name.format_map( {'name':'alex','year':12} ))#格式化key:value输出 print('ab23'.isalnum())#判断字符串中是否全是字母或数字 print('abA'.isalpha())#判断字符串中是否全是字母 print('1A'.isdecimal())#判断是否是10进制数字 print('01'.isdigit())#判断是否是整数 print('a 1A'.isidentifier()) #判读是不是一个合法的标识符 print('033'.isnumeric())#判断字符串中是否只有数字,跟isdigit()相似 print('My Name Is '.istitle())#判断单词是否都是大写开头 print('My Name Is '.isprintable()) #tty file ,drive file判断字符串是否可打印 print('My Name Is '.isupper())#判断字符串是否全大写 print('+'.join( ['1','2','3']) ) print( name.ljust(50,'*') )#在字符串末尾添加“*”字符,组成一个长度为50的字符串 print( name.rjust(50,'-') )#在字符串开头添加“-”字符,组成一个长度为50的字符串 print( 'Alex'.lower() )#大写变小写 print( 'Alex'.upper() )#小写变大写 print( '\nAlex'.lstrip() )#删除左边的\n print( 'Alex\n'.rstrip() )#删除右边的\n print( ' Alex\n'.strip() )#删除左右两边的\n和空格 p = str.maketrans("abcdefli",'123$@456')#为左右两边的字符串中的字符建立一一对应关系,左右两边的字符串长度要相同 print("alex li".translate(p) )#根据p中的字符对应关系,替换“alex li”中的字符 print('alex li'.replace('l','L',2))#替换2个“l”字符为“L”,从左向右替换 print('alex lil'.rfind('l'))#从左向右查找,返回最后一个"l"字符的位置 print('1+2+3+4'.split('+'))#字符串拆分,返回一个列表 print('1+2\n+3+4'.splitlines())#以"\n"拆分字符串,返回一个列表 print('Alex Li'.swapcase()) #大写转小写,小写转大写 print('lex li'.title()) #字符串转标题,单词首字母都变成大写 print('lex li'.zfill(50))#在左侧填充0,组成一个长度为50的字符串 print( '---')
字典操作
#!/usr/bin/env python # _*_coding:utf-8_*_ # Author:zlt #key-value #创建一个创建一个两层的字典 av_catalog = { "欧美":{ "www.youporn.com": ["很多免费的,世界最大的","质量一般"], "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"], "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"], "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"] }, "日韩":{ "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"] }, "大陆":{ "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"] } } #修改字典内的值 av_catalog["大陆"]["1024"][1] = "可以在国内做镜像" print(av_catalog) #如果key值”大陆“已经存在,则不做任何修改,并将该字典元素的value返回,如果key值”大陆“不存在,则添加一个字典元素 print(av_catalog.setdefault("大陆",{"www.baidu.com":[1,2]})) #key值“澳洲”不存在,则在字典av_catalog中添加一个元素,并返回其value print(av_catalog.setdefault("澳洲",{"www.baidu.com":[1,2]})) print(av_catalog) info = { 'stu1101': "TengLan Wu", 'stu1102': "LongZe Luola", 'stu1103': "XiaoZe Maliya", } b ={ 'stu1101': "Alex", 1:3, 2:5 } info.update(b) #将字典b中info没有的元素,添加到info字典中 print(info ) c = dict.fromkeys([6,7,8],[1,{"name":"alex"},444])#将结合中的每一个元素作为key,将第二个参数作为value,形成一个新的字典 print(c ) c[7][1]['name'] = "Jack Chen"#字典中的value属于浅拷贝,即只拷贝第一层,如果为list,则只拷贝其存储地址 print(c) print(info.items())#生成一个由“元组”组成的list,其中“元组”的第一、第二个值分别为原来字典的key、value #info['stu1104'],字典中如果不存在此key值,会报错 print(info.get('stu1103'))#查找用get,key值不存在,也不会报错 print('stu1103' in info) #判断字典info中是否存在key值“stu1103” print(info) info["stu1101"] ="武藤兰" #存在就修改 info["stu1104"] ="CangJingkong" #不存在就添加 print(info) #del info["stu1101"] #删除字典元素 print(info.pop("stu1101")) #删除字典元素 print(info) print(info.popitem())#从字典中取出一个(key,value)元组,并在字典中将其删去 print(info) info = { 'stu1101': "TengLan Wu", 'stu1102': "LongZe Luola", 'stu1103': "XiaoZe Maliya", } for i in info: #建议使用这种遍历方式 print(i,info[i]) for k,v in info.items(): #会先将字典转成列表,然后遍历,一旦数据量较大,字典转列表过程就会花费大量时间 print(k,v)