设为首页 收藏本站
查看: 751|回复: 0

[经验分享] Head First Python学习笔记4——处理数据

[复制链接]
发表于 2015-12-2 03:04:51 | 显示全部楼层 |阅读模式
  有这么几组数据需要你处理:
  James  2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
  Julia   2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21
  Mikey  2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38
  Sarah  2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55
  这是他们四个人跑600米花费的时间,现在需要用python实现找到每个选手跑得最快的三个时间。
  首先,自然是分解数据,用split(",")得到列表。然后排序,说道排序,python里有两种排序方法:
  1.原地排序:列表方法sort()排序完成后会替换掉原来的数据,原有顺序会消失
  2.复制排序:内置函数sorted(),复制原有数据,在排序完成后返回,原有数据和顺序依然保留
  打开IDLE试试下面的代码:



>>> data=[1,2,7,5,3,8]
>>> sorted(data)
>>> data.sort()
>>> data

  那么接下来试试给上面的选手数据排序吧。
  排序结果肯定不行,因为没有处理列表里的数据,仔细看数据,有2-34,3:21,2.34这些符号不同,所以要先统一符号。
  统一成数字吧,这样最方便排序了。想想前面学的的东西,要怎么处理呢?关键字:循环、替换



def sanitize(timestr):
if ("-" in timestr) or (":" in timestr):
return timestr.replace("-", ".").replace(":", ".")
else:
return timestr
newdata=[]
def sortdata(data):
for item in data:
newdata.append(sanitize(item))
  return newdata
print(sorted(newdata))

  这里用到了两个新概念:
  1.方法串链,学过js应该很熟悉了,c#也可以,但比较少用。所谓方法串链简单来说就是调用一个方法后用返回值直接调用下一个方法,所以没有返回值的方法串链会出错的。另外方法串链的顺序是自左向右。如:timestr.replace("-", ".").replace(":", ".")就是先调用replace替换-,返回的字符串再调用replace替换:
  2.函数串链,同方法串链,但函数串链是从右向左执行,如:print(sorted(newdata))先用sorted函数对newdata排序,然后print函数打印
  另外sort()和sorted()默认都是升序排列,如果需要降序,则需要传入参数reverse=True
  如果你嫌循环的代码太多的话(这也叫多?)可以使用列表推导:



def sortdata(data):
newdata = [sanitize(item) for item in data]
  #      首先是转换    使用循环表示所有项都进行转换  最后返回列表
return newdata

  你可以试试列表推导,比如将列表里的所有值乘以2,转换列表大小写等等。列表推导真的非常强大。不过也不是完满无缺,列表推导会转换列表内的所有值,所以如果你只想改变符合条件的值,还是用循环迭代吧
  好了,排序完成,就可以取出前3的数据了,还记得吗newdata[0,3](再啰嗦一下:包含左边不含右边)
  但还有一个问题:重复项。可以用循环判断,但这样太麻烦了,python已经给我们提供了集合来解决问题。
  集合里的数据是不允许重复的,如果想往集合里添加重复项,集合会忽略。



result=set(newdata)

  创建集合用set()函数,把列表里的数据放入集合,他会自动帮你去除重复项,然后在进行排序取前3,这里你能自己解决吗?
  总结:
  1.原地排序:排序后替换,复制排序:排序后返回,参数reverse=True可以实现降序排序
  2.方法串链:从左至右,对数据应用一组方法,函数串链:从右至左,对数据应用一组函数
  3.如果要转换整个列表里的值,可以使用列表推导
  4.访问列表里的多个数据项可以使用分片mylist[3,6](含左不含右)
  5.使用set()可以创建一个集合,集合是不允许重复数据项的
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146014-1-1.html 上篇帖子: 用Python实现的一个简单的爬取省市乡镇的行政区划信息的脚本 下篇帖子: python-memcached包使用方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表