复习
三元运算
a:3 if 1==1 else 2
a=['a','b','c','d','e','e']
a,pop(2)
a.pop()
del a[1]=a.pop(1)
a.index('a')获取下标
a.count('a')
a.clear()
a.remove('a')
a.reverse()反转
a.sort()排序
a.extend()扩展
a.copy()浅拷贝,只拷贝第一层
import copy
copy.copy()也是浅拷贝
copy.deepcopy()深拷贝
切片是顾头不顾尾
a[1:6]
a[1:6:2]步长
浅拷贝四中方式:
b=copy.copy(a)
b=a.copy()#仅在py3中有
b=a[:]
b=list(a)
元组只有两个方法:count index
a=['a','b']
for i in enumerate(a):
print (i)
(0, 'a')
(1, 'b')
c='222'
d='2sad'
c.isdigit()#true 判断对象是不是数字的字符串形式
d.isdigit()#false
字符串方法:
a='aaa fewfsa'
a.capitalize()#首字母大写
'Aaa fewf sa'
a.count('f')
a.ljust(50,'-')#远字符串居左
a.center(50,'-')#打印50个字符,不够的用-填充,并且原字符串居中
a.rjust(50,'-')
a.endswith("sa")#true
字符串也可以切片
a.find("few")#4 a.index('few')
a='axdfae'
b=a.rfind('a')#返回最右边的匹配到的字符的下标,此为4
a= 'my name is {name} and i am {year} old'
b=a.format(name='na',year=32)
b=a.format_map({'name':'na','year':23})
a.isalnum()#判断是否仅包含数字和字母
a.isalpha()#判断是否仅为字母
a.isdigit()
a.isidentififier()#判断是否为合法的标示符。也就是合法的变量名
a.islower()#是否全部为小写
a.isspace()
a.istitle()#是否是一个标题,标题的特征是每个单词的首字母为大写
a.title()
a.isupper()#是否全为大写
a.lower()#大写改小写
a.upper()#小写改大写
a.swapcase()#大写改小写,小写该大写
a.lstrip()#去掉左边的空格
a.rstrip()#去掉右边的空格
a.strip()#去掉两边的空格
a.split()#分割字符,返回一个列表,默认分隔符为空格
a.splitlines()#以换行符为分隔符
b=str.maketrans('abcde','12345')
c='acff'.translate(b)#c为'13ff'
a='aaaa'
b=a.replace('a','d')#b为'dddd'
c=a.replace('a','d',2)#c为‘ddaa’
b='+'.join(['1','2','3'])#b为'1+2+3'
字典:a={'a':1,'b':2}
删除 del a['a']或者a.pop('a')
查找:a.get('a')#有则返回value,没有则返回none,比a['a']安全
b='a' in a#true
在py2中,上面的判断还可以为a has key('a'),但是py3取消了该方法
>>> a.values()
dict_values([1, 2])
>>> a.keys()
dict_keys(['a', 'b'])
b=a.setdefault('a',5)#b为1,a字典为{'a':1,'b':2}
b=a.setdefault('c',5)#b为5,a字典变为{'a':1,'b':2,'c':5}
c={'a':4,'d':43}
a.update(c)
>>> a
{'a': 4, 'b': 2, 'c': 5, 'd': 43}
>>> a.items()
dict_items([('a', 4), ('b', 2), ('c', 5), ('d', 43)])
>>> d=dict.fromkeys(['a','b','c'],32)#初始化一个字典
>>> d
{'a': 32, 'b': 32, 'c': 32}
字典循环方式:
for i in a:
print (i,a[i])#注意每次迭代的i是键
a 4
b 2
c 5
d 43
for k,v in a.items():
print (k,v)
虽然以上两种循环效果一样,但推荐第一种循环,因为第二种循环中,a.items()会首先将字典转换为由元组组成的迭代器,如果字典的数据量很大,那么这一步骤将话费很长时间。
集合的主要作用:
去重,把一个列表变为集合,就自动去重了set([1,2,3,4,5,1,2])
关系测试:测试两组数据的交集,并集
set1={1,2,3}
set2={2,3,5}
set3=set1.intersection(set2)#交集 或者 set1&set2
set4=set1.union(set2)#并集 或者 set1 | set2
set5=set1.difference(set2)#{1} 或者 set1-set2
set6=set1.symmetric_difference(set2)#{1,5} 或者 set1 ^ set2
判断是否是子集
a.issubset(b)#a是否是b子集
b.issuperset(a)#b是否是a父集
a.isdisjoint(b)#判断a和b有没有交集,没有返回真
增删改:
set1.add(4)添加一个
set1.update(5,6,7)添加多个
set1.remove(3)
set1.copy()#浅复制
判断元素在不在集合里面 x in set1
set1.discard()#也是删除,不同于remove的是,remove,如果传入的参数不在集合中,则报错,这个则不报错
文件
a追加模式,r+若代码中只有写没有读,则会在原来位置上替换为写的内容,若代码中既有读又有写,则此处的写变为了追加模式
比如
源文件a是
123
456
789
f=open("a",'r+')
f.readlines()
f.readlines()
f.write('aaaa')
f.close()
则文件变为
123
456
789
aaaa
还是刚才的文件:
f=open("a",'r+')
f.write('bbb')
f.close()
则文件变为
bbb
456
789
aaaa
a+是读和追加模式,二者互不干扰,你读你的我追加我的,不管你读到哪,我都是在末尾追加。
而w+是写和读模式,不过很少用。同样的,二者互不影响
还是上面的a文件:
f=open("a",'w+')
print (f.readline())
print (f.readline())
print (f.readline())#都将打印空,写读,毕竟是写,不是追加,所以跟写模式一样,会重新创建文件。
f.write("gagaga")
f.close()#文件a变为gagaga
然后说明什么叫二者互不影响
f=open("a",'w+')
f.write("123456")
f.write("abcdef")
f.write("ABCDEF")
f.seek(2)
f.readline()#打印3456
f.write("789")
原文件变为
123456
abcdef
ABCDEF
789
f=open("a",'r',encoding='utf-8')#把f称为文件句柄,此对象记录了了系统读文件读到哪里了的位置信息,我们可以用f.tell()查看读到第几个字符了
f=open("a",'r',encoding='utf-8')
print (f.tell())#0
f.read(5)#读5个字符
print (f.tell())#5
如果此时我们想把位置移到某个位置读取,可用。f.seek()
f.seek(0)#所以这个就表示又移回了开头位置
读文件推荐用的代码:
for i in f:
print i
推荐以上代码,以上代码,内存始终只保留文件中的某一行
print (f.encoding)打印文件编码。如果不在open的时候指定,默认系统会认为这个文件是utf-8
f.flush()#
比如我们写文件,我们写了个hello world,系统不会立即把内容写进硬盘里,那样会非常影响速度。而是先写进内存里,这个可以叫做缓冲区。缓冲区有大小,比如是15k,那么等我写入的内容达到15k的时候,在一次性将内容写进硬盘。所以就会有这种情况发生,假如在缓冲区没到15k的时候突然断电,那么缓冲区内的所有数据将遗失。而这个方法的意思是,将缓冲区内的数据强制写入硬盘,即使缓冲区内的数据还没到达15k
由此引出一个题外的跟这个类似的,也是缓冲区有关:
进度条代码:
import sys,time
a=['a','b']
for i in range(22):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(1)
对比下,如果把sys.stdout.flush()这个代码注释掉,那么,系统将等待22秒后,一次性打印22个#,而不是进度条的效果
f=open("a.txt",'a')
f.truncate(5)#截断,比如a.txt文件是123456789,那么运行后a.txt文件为12345