首页 文章 精选 留言 我的

精选列表

搜索[Python],共10000篇文章
优秀的个人博客,低调大师

顺序表数据结构在python中的应用

数据结构不仅仅指的数据值在逻辑上的结构,更有在存储空间上的位置结构,顺序表,故名思意是有一定顺序的数据结构。 顺序表最基本模型如图: 对于基本布局顺序表而言,它存储相同单元大小并且在内存地址上连续的数据,逻辑地址是其元素的逻辑顺序,物理地址第一个元素的内存地址加上离第一个元素的距离,如:e1物理地址是l0,那么e2的物理地址是e1的地址加上e1所占用的大小c,以此类推,en的物理地址是l0+(n-1)*c。 这种基本布局出现了一个问题,如果其中的元素大小不统一,那么岂不是要用最大存储单元作为基本单位,非常浪费空间,因此出现了外置顺序表,它是将元素的索引以相同单元大小连续存放,索引记录对应数据在内存上的地址,那么我们可以通过基本布局的方式去找到索引,再根据索引找到数据。 在熟悉了顺序表的基本模型后,我们再看顺表的结构,如图所示: 实际的顺序表

优秀的个人博客,低调大师

python数据解析模块之glom模块的使用(一)

glom模块的使用 简单说下glom模块主要是处理结构化数据用的,安装简单pip install glom即可,下面就glom的方法参数做例子讲解。 glom 和模块同名的glom方法使用方法: .glom(target, spec, **kwargs) target参数是结构化数据,一般是json嵌套类型。 spec参数是定义模板 **kwargs包含键值类型的参数:default,skip_exc,scope 我们来看个简单的例子、 target={'a':{'b':{'c':{'d':{'e':[1,2,3,4,5,6,7]}}}}} spec='a.b.c.d.e'output=glom(target,spec)print(output) #输出[1,2,3,4,5,6,7] 我们尝试下更多玩法: target={'a':{'b':{'c':{'d':{'e':[1,2,3,4,5,6,7]}}}}} spec={'aa':'a.b.c.d.e'}output=glom(target,spec)print(output) #输出{'aa':[1,2,3,4,5,6,7]} target2={'a':{'b':{'c':[{'d':[1,2,3,4]},{'d':[4,5,6,7]}]}}} spec2={'test':('a.b.c',['d'])} output2=glom(target2,spec2)print(output2) #输出{'test':[[1,2,3,4],[4,5,6,7]]} 再来一个官方的例子,综合运用一下: target={'system':{'planets':[{'name':'earth','moons':1}, {'name':'jupiter','moons':69}]}} spec={'names':('system.planets',['name']), 'moons':('system.planets',['moons'])} 输出:{'moons':[1,69],'names':['earth','jupiter']} 通过上面的一些例子可以看出,spec基础用法就是''里面依次写键名.键名.键名.键名, 另外需要注意的一点,如果列表里有字典取其值的话要求是键名必须相同就上面的'd'键。 . 可以看出glom和json的取得相比省去了很多的[].使用方便,另外spec的表达式还支持运用表达式比如lambda。 再来看一个运用参数比较全的例子 target={'a':[0,1,2]}#给定一个结构化数据spec={'a':('a',[lambdax:x/x])}#获取a的值里面元素的每个元素除以本身的值。output=glom(target,spec,default='666',skip_exc=ZeroDivisionError)print(output)#输出666 上面的结果主要演示的是spec的高级用法和第三个参数的用法。上面计算0/0的时候报错,错误类型ZeroDivisionError,所以我们让ZeroDivisionError跳过了错误,同时配合default给定一个错误时的默认值。 但是如果出现下面的情况怎么办呢? t={'a':{'b.c':{'c':{'d':{'e':[1,2,3,4,5,6,7]}}}}} s={'aa':'a.b.c.c'}print(glom(t,s)) 接下来让我们看Path方法 Path glom.Path(*path_parts) Path objects specify explicit paths when the default 'a.b.c'-style general access syntax won’t work or isn’t desirable. Use this to wrap ints, datetimes, and other valid keys, as well as strings with dots that shouldn’t be expanded,下面具体的看例子。 fromglomimportglom,Path target2={'a':{'b':{'c':[{'d':[1,2,3,4]},{'d':[4,5,6,7]}],'w':{'3.c':'e'}}}} output2_1=Path(glom(target2,Path('a','b','w','3.c')))print(output2_1)#输出e 然后我们回过头来看看上面使用spec的方式时出现的错误 t={'a':{'b.c':{'c':{'d':{'e':[1,2,3,4,5,6,7]}}}}}print(glom(t,{'aa':Path('a','b.c','c')})) #输出{'aa':{'d':{'e':[1,2,3,4,5,6,7]}}} 注意点: 1.path的路径的层次关系必须是紧挨着。比如上面我是直接Path('a','c')就会报错了。 2.path不能取类似下面这种的列表里的键需要配合glom处理。 Path('system','planets','name')或者Path('system','planets',['name'])都不行。 target={'system':{'planets':[{'name':'earth','moons':1}, {'name':'jupiter','moons':69}]}} Literal class glom.Literal(value)

优秀的个人博客,低调大师

python设计模式(二十三):访问者模式

访问者模式,数据结构中保存着许多元素,当改变一种对元素的处理方式但时,我们避免重复的修改数据类的结构,那我们在设计之初就将数据的处理分离,即数据类只提供一个数据处理的接口,而数据类的处理方法我们叫它访问者,那么相同结构的数据面临不同的处理结果时,我们只需要创建不同的访问者。 我们假设一种场景:上市公司的原始财务数据,对于会计来说需要制作各种报表,对于财务总监来说需要分析公司业绩,对于战略顾问来说需要分析行业变化,我们来实现这一过程。 classFinance: """财务数据结构类""" def__init__(self): self.salesvolume=None#销售额 self.cost=None#成本 self.history_salesvolume=None#历史销售额 self.history_cost=None#历史成本 defset_salesvolume(self,value): self.salesvolume=value defset_cost(self,value): self.cost=value defset_history_salesvolume(self,value): self.history_salesvolume=value defset_history_cost(self,value): self.history_cost=value defaccept(self,visitor): passclassFinance_year(Finance): """2018年财务数据类""" def__init__(self,year): Finance.__init__(self) self.work=[]#安排工作人员列表 self.year=year defadd_work(self,work): self.work.append(work) defaccept(self): forobjinself.work: obj.visit(self)classAccounting: """会计类""" def__init__(self): self.ID="会计" self.Duty="计算报表" defvisit(self,table): print('会计年度:{}'.format(table.year)) print("我的身份是:{}职责:{}".format(self.ID,self.Duty)) print('本年度纯利润:{}'.format(table.salesvolume-table.cost)) print('------------------')classAudit: """财务总监类""" def__init__(self): self.ID="财务总监" self.Duty="分析业绩" defvisit(self,table): print('会计总监年度:{}'.format(table.year)) print("我的身份是:{}职责:{}".format(self.ID,self.Duty)) iftable.salesvolume-table.cost>table.history_salesvolume-table.history_cost: msg="较同期上涨" else: msg="较同期下跌" print('本年度公司业绩:{}'.format(msg)) print('------------------')classAdviser: """战略顾问""" def__init__(self): self.ID="战略顾问" self.Duty="制定明年战略" defvisit(self,table): print('战略顾问年度:{}'.format(table.year)) print("我的身份是:{}职责:{}".format(self.ID,self.Duty)) iftable.salesvolume>table.history_salesvolume: msg="行业上行,扩大生产规模" else: msg="行业下行,减小生产规模" print('本年度公司业绩:{}'.format(msg)) print('------------------')classWork: """工作类""" def__init__(self): self.works=[]#需要处理的年度数据列表 defadd_work(self,obj): self.works.append(obj) defremove_work(self,obj): self.works.remove(obj) defvisit(self): forobjinself.works: obj.accept()if__name__=='__main__': work=Work()#计划安排财务、总监、顾问对2018年数据处理 #实例化2018年数据结构 finance_2018=Finance_year(2018) finance_2018.set_salesvolume(200) finance_2018.set_cost(100) finance_2018.set_history_salesvolume(180) finance_2018.set_history_cost(90) accounting=Accounting()#实例化会计 audit=Audit()#实例化总监 adviser=Adviser()#实例化顾问 finance_2018.add_work(accounting)#会计安排到2018分析日程中 finance_2018.add_work(audit)#总监安排到2018分析日程中 finance_2018.add_work(adviser)#顾问安排到2018分析日程中 work.add_work(finance_2018)#添加2018年财务工作安排 work.visit() 会计年度:2018 我的身份是:会计职责:计算报表 本年度纯利润:100 ------------------ 会计总监年度:2018 我的身份是:财务总监职责:分析业绩 本年度公司业绩:较同期上涨 ------------------ 战略顾问年度:2018 我的身份是:战略顾问职责:制定明年战略 本年度公司业绩:行业上行,扩大生产规模 ------------------ 上面年度可以实现:安排不同年份的财务报表给不同的角色分析,这就是访问者模式的魅力;访问者模式的核心是在保持原有数据结构的基础上,实现多种数据的处理方法,该方法的角色就是访问者。 访问者模式作为常用设计模式中难度最大的一种模式,他的难度在于高度的抽象,及其多层嵌套,需要细心的品味。

优秀的个人博客,低调大师

使用python计算与你投缘与无缘的生肖

三合 合是明合,光明正大地合,即是三个生肖的吉配。 申子辰三合,猴,鼠,龙,三合为一组死党;巳酉丑三合,蛇,鸡,牛,三合为一组死党;寅午戌三合,虎,马,狗,三合为一组死党亥卯未三合,猪,兔,羊,三合为一组死党。任何一组死党中的某一个人,皆会认为另两个成员是他的忘年之交。思维,价值观,习惯,动作等等总认为是那么情投意合。您有没有注意到,三合的地支各相差几岁答案是四岁或八岁本来俗话说:?!差4岁,8岁成婚才是天作之合,本来是依据这来的。 六合 总的来说,六合贵人对自个起着非常大的效果,或许在工作上给你强有力的扶持,或许在工作上给你及时的点拨,或许在财富上给你满足的协助,或许在生活上给你仔细的照顾,或许在人际联系上给你调和好各种敌对,或许在精神上给你交心的慰藉等等。 冥冥之中两人共处即是那么谐和调和,并且都很情愿为对方支付两人一同协作,将会打拼下

优秀的个人博客,低调大师

Python零基础学习笔记(四十)—— datetime和Calendar

import datetime import time ''' datetime比time高级了不少,可以理解为date time基于time进行了封装, 提供了各种实用的函数,date time模块的接口更为直观,更容易调用 模块中的类: datetime 同时有时间和日期 timedelta 主要用于计算时间跨度 tzinfo 时区相关 time 只关注时间 date 只关注日期 ''' #获取当前时间 d1 = datetime.datetime.now() print(d1) # d2 = datetime.datetime(1995, 4, 28,10,23,34,123355) print(d2) # d3 = datetime.datetime.time(d1) print(d3) #将时间转换为字符串 #d4 = d1.strptime("%Y-%m-%d %X") #print(d4) #时间加减 d5 = d1 - d2 print(d5) #间隔的天数 print(d5.days) #间隔天数除外的秒数 print(d5.seconds) import calendar ''' 日历 ''' #使用 print(calendar.month(2019, 7)) #返回指定年的日历 print(calendar.calendar(2019)) #判断闰年,返回True print(calendar.isleap(2000)) #返回某个月的weekday的第一天和这个月的天数 print(calendar.monthrange(2018, 12)) #返回某个月以每一周为元素的列表 print(calendar.monthcalendar(2017, 12))

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册