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 ...
随机推荐
- 深入理解Aspnet Core之Identity(3)
主题 账户管理一个比较常见的功能就是密码强度策略,Identity已经内置了一个通用的可配置的策略,我们一般情况下可以直接拿来用即可.本篇我会介绍一些Identity内置的密码策略类:Password ...
- BitAdminCore框架更新日志20180531
索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/coo ...
- .net Framework使用之 MongoDB
新建Helper using MongoDB.Bson; using MongoDB.Driver; using System; using System.Collections.Generic; u ...
- .net core获取appsettings CustomSettings
private static string GetCustomSettings(string key) { var config = new ConfigurationBuilder() .AddIn ...
- Storm的Metric接口简介
本文由作者林洋港授权网易云社区发布. 作为服务端程序,我们总是需要向外界报告一些统计数据,以助于了解系统的运行情况,比如某个接口的调用时间.系统处理的请求数等等.当我们的程序以Storm Topolo ...
- BigData – Join中竟然也有谓词下推!?
本文由 网易云发布. 在之前的文章中简要介绍了Join在大数据领域中的使用背景以及常用的几种算法-broadcast hash join .shuffle hash join以及 sort merg ...
- CRT和EXCRT简单学习笔记
中国剩余定理CRT 中国剩余定理是要求我们解决这样的一类问题: \[\begin{cases}x\equiv a_1\pmod {b_1} \\x\equiv a_2 \pmod{b_2}\\...\ ...
- oi之詩
§3我看到你所说的那位OIer了. §2OIERNAME? §3是的.小心.他已达到了更高的境界.他能阅读我们的思想. §2没关系.他认为我们是代码的一部分. §3我喜欢这个OIer.他做得很好.他从 ...
- sql语句_统计总成绩最高的前2名
有一个数据表,id user_id score 三个字段,计算总成绩最高的前两名 SELECT * FROM (SELECT user_name,SUM(score) AS score FROM us ...
- git修改文件权限方式
查看Repository中文件权限 git ls-tree HEAD 100644 blob 018321abfbff52d175a788597f5b5f3f17f67dc7 .gitignore 1 ...