Head First Python学习笔记4——处理数据

有这么几组数据需要你处理:

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()可以创建一个集合,集合是不允许重复数据项的

 

转载于:https://www.cnblogs.com/fengbol/p/4837547.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle ora 00910,NVARCHAR2字段超长问题:ORA-00910: specified length too long for its datatype

NVARCHAR2字段超长问题:ORA-00910: specified length too long for its datatype前几天在IMP的时候遇到了个问题:IMP-00017: following statement failed with ORACLE error 910:"CREATE TABLE "T_CSL_DYNAITEMDATAENTRY" ("FID&quo…

Swift - 触摸事件(点击,移动,抬起等)说明及用例

在iOS开发中,UIGestureRecognizer可以方便的响应处理手势事件。 而如果要想更精细的处理,我们还需要借助touchesBegan,touchesMoved,touchesEnded等触摸方法。这些方法 都是UIResponder中的方法。视图控制器和视图类,都…

鼠标移动响应php程序,jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】...

本文实例讲述了jQuery实现的响应鼠标移动方向插件用法。分享给大家供大家参考,具体如下:HTML代码如下:www.jb51.net jQuery响应鼠标移动*{margin:0;padding:0;}ul,li{list-style:none;}div{font-family:"Microsoft YaHei";}html,bo…

读《大道至简—是懒人造就了方法 》有感

读了大道至简第一章编程的精义之后,我觉得感触颇深,于是乎我又读了第二章是懒人造就了方法 ,之后果然没有让我失望,第二章写的也是非常的好,非常的吸引我。 第二章的开头便引用了李冰凿山的故事,在战国时代…

《大道至简》第二篇读后感

今天把周爱民大道至简的第二章关于是懒人造就了方法读了几遍,作者通过战国时李冰凿山与愚公移山的比较来阐述懒人早就方法主题,以前听历史老师讲课的时候正是因为懒人才会有那么多可以节省人们力气和时间的发明,但懒人并不是真的懒&#xff0…

oracle备份磁盘头,ASM 磁盘头信息备份

ASM磁盘头信息保存在每个磁盘的前4K里面,这个信息的备份对于ASM的恢复非常重要,有下面的几种方法1.直接做dd来备份磁盘的前4K,磁盘头信息丢失时,dd回来 备份:dd if/dev/raw/raw1 of/gyj/asmheader.dd bs4096 coun…

var s=+newDate();的用法,表示对应的时间截

var snewDate(); var snewDate(); 解释如下:是不存在的; new Date()是一个东西; 相当于.valueOf(); 看到回复补充一下.getTime()这个也是得到毫秒数 //4个结果一样返回当前时间的毫秒数alert(new Date());alert(new Date);var snew Date();alert(s.valueOf()); alert(s.getTime…

asp控制oracle,asp下用OracleInProcServer完成对Oracle的连接和操作

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼tblnamerequest("tb")Dim objOraSession,objOraDbDim strDbUser,strDbPwd,strDbConnCall ConnectDB()Sub ConnectDB() 连接数据库On Error Resume NextstrDbUser "liujincai" 连接用户名strDbPwd "ljc1…

jitpack让使用第三方依赖库更简单

在开发过程中,使用第三方优秀依赖库是个很常见的问题,有的时候是maven,或者gradle, 或者sbt,大部分库工程,都会有对应的gradle,maven依赖代码,但是有的没有,尤其是使用的snapshot的依赖的时候,虽…

linux用户命令快捷链接,linux简单命令

linux系统命令是最基础也是最重要的部分,下面由学习啦小编为大家整理了linux简单命令的相关知识,希望对大家有帮助!linux简单命令一、文件和目录家目录为 /home/user 或者 ~目录分为两种:绝对目录,从根目录开始写相对目…

Swift - 发送消息(文本,图片,文件等)给微信好友或分享到朋友圈

通过调用微信提供的API接口,我们可以很方便的在应用中发送消息给微信好友,或者分享到朋友圈。在微信开发平台(https://open.weixin.qq.com)里,提供了详细的说明文档和样例。但由于提供的样例是使用Objective-C写的&…

linux怎么改程序图标,如何在Ubuntu Unity上修改应用程序图标

这篇文章将教大家在Ubuntu Unity上修改应用程序图标,这个教程适合于Ubuntu 14.04, Ubuntu 13.10, Ubuntu 12.04 等使用Unity作为默认桌面环境的发行版。在Unity桌面环境,程序启动器实际上以.desktop为后缀的文件的形式存储在电脑上,所以我们可…

php 大流量网站访问

1:确认服务器硬件能否支持当前流量 2:数据库优化,用到什么字段查什么字段,减轻查询负担。 3:静态化,缓存,减少连库操作。 4:禁止外部盗链,减轻负载压力。 5:控…

linux内核 默认路由表,Linux 默认路由表 0.0.0.0

netstat -nr命令会显示路由表的内容。网关为0.0.0.0的网络通常是直连到网络设备上的。因为到自己的直连设备上是不需要网关的,所以0.0.0.0的网关地址是正常的。目的地址是0.0.0.0的路由是你的缺省网关。在这个例子里,有两个网关,缺省的并且是到255.255.2…

htop linux命令详解,htop使用详解

在管理进程时通常要借助一些工具,比较常用的就是ps和top了;不过CentOS还为我们提供了一个更加强大的工具htop,下面就来了解一下此工具的使用方法。一、安装htophtop工具在epel源中提供,请自行配置epel源,也可以直接下载…

iOS 中的 xml 解析

在ios 中解析xml 的方法有很多种 1.苹果原生 NSXMLParser:SAX方式解析,使用简单 2.第三方框架 libxml2:纯c语言,默认包含在ios sdk中,同时支持DOM 和 SAX 方式解析 GDataXML : DOM方式解析,由谷歌开发,基于…

Android Termux安装SSH结合内网穿透实现远程SFTP文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

linux上clisp运行lisp,apache - 重新访问linux + apache2 + mod_lisp + CLISP - 堆栈内存溢出

CLISP已安装并成功运行:(加载“ modlisp-clisp”)(modlisp:modlisp-server)运行正常,即无休止Python可通过localhost在/ usr / lib / cgi-bin中正常工作试图使clisp服务器在/ var / www / html / lsp中工作通过localhost / lsp打印的浏览器访…

linux解压war包乱码,linux中zip解压乱码解决方法

在windows上压缩的文件,是以系统默认编码中文来压缩文件。由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。有2种方式解决问题:1、通过unzip行命令解压,指定字符集unzip -O …

Android沉浸式通知栏设计

转载博客:http://www.2cto.com/kf/201503/381348.html Android4.4新特性,系统状态栏一体化。 实现的步骤主要有以下几点: 1.android4.4 以上版本 2.设置app全屏: 方法:在AndroidManifest.xml中设置android:theme"…