前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python学习笔记(3):数据集操作-列的统一操作

Python学习笔记(3):数据集操作-列的统一操作

作者头像
用户1075292
发布2018-01-23 10:59:49
1.1K0
发布2018-01-23 10:59:49
举报
文章被收录于专栏:听雨堂听雨堂

对数据库查询,将得到一个数据集: rs=AccessDB.GetData("select * from log where f_code='600259' limit 5,5") 结果的每行对应一个元组:

image
image

数据集是一个游标,只能用一次,如果需要反复查询,可以转换为列表再操作。

image
image

但是,如果只能通过逐行循环来处理,就和以前的程序没啥区别了。我设定了一个小目标:合计一下第8列(金额),看Python能否有所不同。 尝试1:用map取出第8列,再用reduce合并。

image
image

其中需要注意,reduce中,前一次的结果将作为参数参与下一次的计算,但到底是第几个参数,写了一个代码试验了一下,应该是第一个:

image
image

尝试2:不用map,直接用reduce,关键是第一个参数是元组,但后面的又都是数值,只能考虑在前面附加一个数值。但rs无法附加,所以只能对转换的列表操作。

image
image

也能成功,但总是不满意,转换为列表也有一定的耗费,最好能在游标的基础上来处理。 尝试3:对参数进行判断,如果是初始状态(元组类型),则用分量操作,否则,直接操作。

image
image

python的分支判断取值,有两种方式:  条件 and 真的取值 or 假的取值  真的取值 if 条件 else 假的取值 但第一种在真的取值为“假”时会错误,所以使用第二种。 第三种方法,以元组作为reduce的参数,传递进入后,通过类型判断解决第一次类型问题,还能再进一步扩展。

代码语言:js
复制

from functools import reduce

>>> reduce(lambda x,y:x+y,map(lambda x:x[7],rs))
>>> reduce(lambda x,y:x+y[7],[0]+ct)
>>> reduce(lambda x,y:(x[7] if type(x)==tuple else x)+y[7],rs)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档