python基础知识点总结

来源:互联网 发布:精业本草官方淘宝店 编辑:程序博客网 时间:2024/05/18 01:40

一、对迭代器进行切片

#!/usr/bin/env python#-*- coding:utf-8 -*-from itertools import islice#islice(iterable, [start,] stop [, step])  语法f = open('/var/log/messages','r')l = islice(f,100,300)     #从100切到300ll = islice(f,100,None)   #从100切到最后lll = islice(f,500)       #从开头切到500

备注:如果从中间切片,会对前面的数据造成影响

二、反向迭代以及如何实现反向迭代

#!/usr/bin/env python#-*- coding:utf-8 -*-l = [1,2,3,4,5,6]reversed(l)     #主要是调用 __reversed__  方法class Floatrange(object):    def __init__(self,start,end,step):        self.start = start        self.end = end        self.step = step    def __iter__(self):        t = self.start        while t < self.end:            yield t            t += self.step    def __reversed__(self):        t = self.end        while t > self.start:            yield t            t -= self.step#调用aa = Floatrange(1.0,4.0,0.5)for i in aa:    #正向    print(i)print(''.center(20,'='))for x in reversed(aa):   #反向    print(x)

三、在一个for循环中迭代多个对象
1、并行(zip函数,它能将多个可迭代对象合并,每次迭代返回一个元组)
例如: 统计每个学生成绩(语文、数学、英语)总和

#!/usr/bin/env python#-*- coding:utf-8 -*-from random import randint#随机生成语文数学英语成绩,以每个班30人为例chinese = [randint(60,100) for _ in range(30)]math = [randint(60,100) for _ in range(30)]english = [randint(60,100) for _ in range(30)]total = []for c,m,e in zip(chinese,math,english):    total.append(c+m+e)print(total)

备注:zip[chinese,math,english]后面加可迭代对象就会生成新的可迭代对象,形式如下[(1,2,3),(),()….]

2、串行(itertools._chain函数,它能将多个迭代对象连接)
例如: 某年级有3个班,每次考试的语文成绩分别存储在3个表中,依次迭代每个列表,统计成绩高于90的人数。

#!/usr/bin/env python#-*- coding:utf-8 -*-from random import randintfrom collections import _chain   #在python2.7种是(from collections import chain)t1 = [randint(60,100) for _ in range(30)]t2 = [randint(60,100) for _ in range(42)]t3 = [randint(60,100) for _ in range(36)]count = 0for x in _chain(t1,t2,t3):    if x > 90:        count += 1print(count)

四、统计出现频率比较高的三个元素

#!/usr/bin/env python#-*- coding:utf-8 -*-from collections import Counterfrom random import randintdata = [randint(0,20) for _ in range(30)]#方法一:通过字典的key进行判断# dic = dict.fromkeys(data,0)# for x in data:#     dic[x] += 1# print(dic)#方法二:调用collections 标准库里面的Counter方法c1 = Counter(data)a = c1.most_common(3)print(a)

五、对字典的值values进行排序
思路:先将zip函数将字典的key和value反转,然后对新key(也就是value)进行排序即可
思路2:利用内置函数sorted

#!/usr/bin/env python#-*- coding:utf-8 -*-from random import randintd = {x: randint(60,100) for x in 'abegxg'}t = zip(d.values(),d.keys())                 #zip函数将字典的key和value反转,然后再进行排序print(sorted(d.items(),key=lambda x:x[1]))   #内置函数

六、取字典里面的公共key

#!/usr/bin/env python#-*- coding:utf-8 -*-from random import randint,samplesample('abcderg',randint(3,6))       #随机取样sample,从'abcderg'中随机取出三到六个不等的字符串s1 = {x:randint(1,4) for x in sample('abcderg',randint(3,6))}s2 = {x:randint(1,4) for x in sample('abcderg',randint(3,6))}s3 = {x:randint(1,4) for x in sample('abcderg',randint(3,6))}

解决方法思路:
①使用字典的viewkeys() 放大,得到一个自定keys的集合
②使用map函数,得到所有字典的keys的集合
③使用reduce函数,取得所有字典的keys的集合的交集

#方法一:#将字典1的key循环,然后判断字典2和字典3中是否有res = []for k in s1:    if k in s2 and k in s3:        res.append(k)print(res)#方法二:#字典viewkeys()方法,在python3里面变成(from collections import _OrderedDictKeysView)s1.viewkeys() & s2.viewkeys() & s3.viewkeys()#方法三:利用reduce函数reduce(lambda a,b : a & b,map(dict.viewkeys,[s1,s2,s3]))   #这个只针对python2有用

七、历史记录命令

#!/usr/bin/env python#-*- coding:utf-8 -*-from collections import dequeq = deque([],5)      #创建容量为5的队列,如果队列里面的值超过五个,就会自动把前面的剔除q.append('a')

八、字符串的操作
1、以什么开头,什么结尾,多个匹配时参数用元组

ss = 'abcedfg'ss.startswith('a')ss.endswith('b')    #或者 [name for name in os.listdir('.') if name.endswith(('.txt','.py'))]  #以.txt和.py结尾

2、字符串分割

re.split(r'[\t,./:_;|" "]+',ss)   #一次性分割完成ss.split('\t') --> t = [] & map(lambda x : t.append(x.split(',')),ss.split('\t'))  #只能一次次来

3、调整字符串日期的格式
将日期格式调整:’2017-05-23 ==> 05/23/2017’
思路:使用正则re.sub()做替换,利用正则表达式捕获组,捕获每个部分内容,在替换字符串中调整各个捕获组的顺序

#!/usr/bin/env python#-*- coding:utf-8 -*-log = open('/var/log/messages','r').read()print re.sub('(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1',log)    #()为捕获组#print re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})',r'\g<month>/\g<day>/\g<year>',log)      #给捕获组起名字,后面直接用名字调用

4、字符串拼接

''.join()   #join里面添加一个可迭代对象,前面是分隔符② + 号       #这个慎用#如果一个列表中既有字符串,又有整型,应将整型转化为字符串ll = ['abc',12,459,'xyz']'-'.join(str(x) for x in ll)    #(str(x) for x in ll)   #这样就变成了一个生成器对象

5、字符串的左,右,居中对齐

str.ljust()str.rjust()str.center()max(map(len,aaa.keys()))          #查看每一个key的长度format()   '<20'  '>20'  '^20'    #左右居中对齐例子:s = 'abc's.ljust(20)        #'abc                 's.ljust(20'=')   #'abc================='format(s,'<20')    #左对齐format(s,'>20')    #右对齐format(s,'^20')    #居中
原创粉丝点击