python进阶学习——自学笔记

目录

  • 学习初衷
  • 第一章
    • 在列表、字典、集合中筛选所需数据
      • 列表:列表解析更佳
        • 生成测试数据
        • 使用fliter函数
        • 列表解析
      • 字典
        • 生成测试数据
        • 字典解析
      • 集合
        • 生成测试数据
        • 集合解析
    • 为元组命名,以提高数据可读性
      • 定义常量代替枚举量
        • 生成测试数据
        • 定义常量
        • 使用namedtuple(是tuple的内置子类)
          • 导入和生成工厂
          • 生成namedtuple 和 访问
    • 统计序列中某元素出现的次数
      • 迭代累计法
        • 生成测试数据
        • 生成存储统计结果的字典
        • 迭代累加
      • Collections.Counter
        • 构建封装类Counrer:此counter已经有统计结果
        • 使用most_comment的子方法:找出出现频率最高的3个列表
    • 对字典自定义排序
      • 内置函数sort
        • 创建测试数据
          • 使用zip
          • 配合lambda函数
    • 找到多个字典的公共键
        • 生成测试数据
        • 用&求公共健
    • 对字典保持有序:按照进入顺序来记录字典
      • collections.OrderedDict
    • 实现用户的历史纪录(有限日志)
      • collections.deque
        • 实现记录保存和读取
  • 第二章
    • 迭代器对象的生成和正向迭代
      • 使用collections的iteratable和iterator
      • 生成器函数
        • 包含生成器函数的类的封装
    • 正向迭代和反向迭代
      • case说明
      • 用例说明
    • 对迭代器进行切片操作
      • itertools.islice
    • 并行迭代和串联迭代
      • 使用zip函数,合并后迭代
      • 使用itertools.chian
  • 第三章
    • 有多个分隔符 处理 字符串
      • 用re.split
    • 字符串拼接
    • 字符串格式:左中右
    • 字符串去掉指定内容
  • 第四章
    • 读写csv数据
    • 读写json数据

学习初衷

规范学习python,以为后续的机器学习奠定基础

第一章

在列表、字典、集合中筛选所需数据

列表:列表解析更佳

生成测试数据

from random import randint
data = [randint(-10,10) for _ in range(10)]

使用fliter函数

for i in ( filter(lambda x : x >=0,data)):
    print(i)

列表解析

[x for x in data if x>=0]

字典

生成测试数据

from random import randint
dict = {x :randint(60,100)for x in range(1,21)}

字典解析

{k:v for k,v in dict.items() if v>90 }

集合

生成测试数据

from random import randint
s = set ( [ randint(-10,10) for _ in range(10)] )

集合解析

{x for x in s if x>0}







为元组命名,以提高数据可读性

数据结构固定,用元组。但是index访问元组内容,十分不便。

定义常量代替枚举量

生成测试数据

student = ('Jax',20,'male','201764681188')

定义常量

NAME,AGE,SEX = 0,1,2
student[NAME]

使用namedtuple(是tuple的内置子类)

导入和生成工厂
from collections import namedtuple
Student = namedtuple('Student',['name','age','male','ID'])
生成namedtuple 和 访问
s = Student('jax',16,'m','2017')
s.name

统计序列中某元素出现的次数

迭代累计法

生成测试数据

data = [ randint(0,20) for _ in range(30)]

生成存储统计结果的字典

ans = dict.fromkeys(data,0)

迭代累加

ans = dict.fromkeys(data,0)
 for x in data:
        ans[x]+=1

Collections.Counter

构建封装类Counrer:此counter已经有统计结果

c2 = Counter(data)

使用most_comment的子方法:找出出现频率最高的3个列表

c2.most_comment(3)





对字典自定义排序

内置函数sort

创建测试数据

from random import randint
dict = {x:randint(60,100) for x in 'xyzabc'}
使用zip
sorted(zip(dict.values(),dict.keys()))
配合lambda函数
sorted(dict.items(),key = lambda x : x[1])





找到多个字典的公共键

生成测试数据

round1 =  {x:randint(1,4) for x in sample('abcdefg',randint(3,6))}
round2 =  {x:randint(1,4) for x in sample('abcdefg',randint(3,6))}
round3 =  {x:randint(1,4) for x in sample('abcdefg',randint(3,6))}

用&求公共健

round1.keys()&round2.keys()&round3.keys()





对字典保持有序:按照进入顺序来记录字典

collections.OrderedDict

from collections import OrderedDict
d = OrderedDict()
d[key] = value;






实现用户的历史纪录(有限日志)

collections.deque

from collections import deque
q = deque([],queueSize)
q.apend(record)

实现记录保存和读取

保存

import pickle
pickle.dump(q,open('history','w'))

读取

q2 = pickle.load(open('history'))





第二章






迭代器对象的生成和正向迭代

由可迭代对象(list,string)得到迭代器对象 iter()

使用collections的iteratable和iterator

skip

生成器函数

包含生成器函数的类的封装

class PrimeNumbers:
    def __init__(self,start,end):
        self.start = start
        self.end = end

    def isPrimeNum(self,k):
        if k<2:
            return False
        
        for i in range(2,k):
            if k%i == 0:
                return False
        return True

    #实现__iter__接口,让PrimeNumbers可迭代
    def __iter__(self):
        for k in range(self.start,self.end+1):
            if self.isPrimeNum(k):
                yield k

测试程序

for x in PrimeNumbers(1,100):
    print(x)





正向迭代和反向迭代

case说明

from collections import Iterable,Iterator
l = [1,2,3,4,5]
#正向
for x in iter(l):
    print(x)
#反向
for x in reversed(l):
    print(x)

事实上,正向迭代需要实现接口__init__() ,反向迭代需要实现接口__reversed__()

用例说明

浮点数生成器


class FloatRange:
    def __init__(self,start,end,step=0.1):
        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

for i in FloatRange(1.0,4.0,0.5):
    print(i)

print('-'*6)

for i in reversed( FloatRange(1.0,4.0,0.5) ):
    print(i)







对迭代器进行切片操作

itertools.islice

#islice会对原对象f造成影响
from itertools import islice
#f为可迭代对象,末尾用none表示
for line in islice(f,100,300):
	print(line)





并行迭代和串联迭代

使用zip函数,合并后迭代

#zip中包装,for中拆分
for c,m,e in zip(chinese,math,english):
	print(...)

使用itertools.chian

for x in chain([1,2,3,4],[5,6,7]):
	print(...)





第三章

有多个分隔符 处理 字符串

用string.split只能含有一个分隔符的情况

用re.split

s = "abc,ef;gi"
import re
print(re.split(r'[,;]+',s))





字符串拼接

''.join(['abc','123','45'])
#如果join的内容除了有字符串,还有数字什么的
list = ['abc',123,45]
''.join(str(x) for x in list)

字符串格式:左中右

'abc'.ljust(20)

字符串去掉指定内容

#去掉两端空白
s = '   abc\t\r   123   '
s.strip()
#s = '---abc   123+++'
#s.strip(r'-+')

#切片拼接
s[:3]+s[5:]

#replace
s.replace(' ','')

#使用re.sub
import re
re.sub('[\t\r]','',s)







第四章

读写csv数据

import csv
rf = open('1.csv','rb')
#reader就是1.csv的迭代器了
reader = csv.rader(rf)

wf = open('2.csv','wb')
writer = csv.writer(wf)
weiter.writerow(...)



读写json数据

#python->jason
l  = ['1','2',"abc"]
j1 = json.dumps(l)

#jason->python
l2 = jason.loads(j1)


你可能感兴趣的:(python进阶学习——自学笔记)