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()可以创建一个集合,集合是不允许重复数据项的
Head First Python学习笔记4——处理数据的更多相关文章
- 吴裕雄--天生自然python学习笔记:WEB数据抓取与分析
Web 数据抓取技术具有非常巨大的应用需求及价值, 用 Python 在网页上收集数据,不仅抓取数据的操作简单, 而且其数据分析功能也十分强大. 通过 Python 的时lib 组件中的 urlpar ...
- Python学习笔记:外部数据的输入、存储等操作
查看current工作路径: >>> import os >>> os.getcwd() 'D:\\python' 更改工作路径: >>> os. ...
- Python学习笔记2-解析数据
Import os; -- Python自带 print(os.getcwd()) -- 获得当前工作目录 os.chdir('/Users/longlong/Documents') -- 转换到/U ...
- Python学习笔记_Chapter 4数据保存到文件
1. What For 将基于内存的数据存储到磁盘上,达到持续存储. 2. HOW 方法一: 将数据写到文件中 常规的处理方式 #file.x被打开的文件,model打开文件的方式 out=open( ...
- python学习笔记之基础数据和控制
注释: 单行注释 # 多行注释''' ''' 注意:当注释中有汉字时需要在python文件的第一行添加如下内容之一:#coding:gbk或#coding:utf-8或##-*- coding ...
- Python学习笔记之将数据写入到文件中
10-3 访客:编写一个程序,提示用户输入其名字:用户作出响应后,将其名字写入到文件guest.txt 中. 编写Python代码: username = input("Please ent ...
- python学习笔记3.2_数据导出
一.data.to_csv:数据导出 1.to_csv:将数据导出为逗号分隔的文件 2.输出为其他分隔符的文件 写入到控制台,并打印:sys.stdout na_rep:对空值进行标注 二.serie ...
- Python学习笔记三:数据特征分析
完成数据清理后,下面通过图表展开对数据的分析. 1.前期初判(分布分析): 1)判断分组区间: # a.散点图:plt.scatter(data[字段1],data['字段2'], s = data[ ...
- python学习笔记3.1_数据读取常用函数参数
一.read_table/read_csv常用函数参数 1.path:表明文件系统位置的字符串.url或文件型对象 2.sep或delimiter:用于分隔每行字段的字符序列或正则表达式 3.head ...
随机推荐
- 附加属性来控制控件中,要扩展模块的visibility
可解决: 文本框控件中的按钮,DataGridColumnHeader中加入Filter控件... cs文件中的 附加属性 + 样式文件中的 template+控件 -> visibility ...
- 2D Convex Hulls and Extreme Points( Convex Hull Algorithms) CGAL 4.13 -User Manual
1 Introduction A subset S⊆R2 is convex if for any two points p and q in the set the line segment wit ...
- C#多线程编程系列(二)- 线程基础
目录 C#多线程编程系列(二)- 线程基础 1.1 简介 1.2 创建线程 1.3 暂停线程 1.4 线程等待 1.5 终止线程 1.6 检测线程状态 1.7 线程优先级 1.8 前台线程和后台线程 ...
- 【cocos2d-x 3.0-Mac配置篇】
就在昨天触控正式发布了3.0正式版本... 在这个喜大普奔的日子里,我们又开始了新一轮的革命,先不说其他的,再来看看3.0目录文件里面有什么? 首先是精简了很多,无论是从目录结构,和所用到的工具类,都 ...
- 【转】目标检测之YOLO系列详解
本文逐步介绍YOLO v1~v3的设计历程. YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这 ...
- 【转】JMeter学习参数化User Defined Variables与User Parameters
偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一 ...
- C# 后缀名
用Visual Studio进行开发时项目内会有很多文件,其中常见的文件名后缀及其功能如下: .sln:解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息. .csproj:项目文 ...
- C# 5.0-.Net新特性
调用者信息特性 CallerMemberNameAttribute | CallerFilePathAttribute | CallerLineNumberAttribute .NET Framewo ...
- 指定nginx某个目录显示目录结构
1.修改配置文件/usr/local/nginx/conf/nginx.conf 指定目录,开启autoindex为on. location /study { autoindex on; } 2. 保 ...
- easyui datagrid 清除缓存方法
easyui datagrid 清除缓存方法 今天在项目中做了一个添加合同编号页面,添加合同编号了,在datagrid列表上没有显示刚才添加的那个合同编号. 这个问题在IE上特别明显. 原因是添加编号 ...