headfirst python 05, 06
处理数据
with open('james.txt') as jaf:
data = jaf.readLine()
james = data.strip().split(',') #先去掉空格而否有,号分隔, 这叫做方法串联.
这样会得到 james 是一个列表(数组)
排序:
在原有的列表中排序, 和新建一个列表排序两种
原有列表排序: james.sort()
新建列表排序: james2 = sorted(james)
调整数据格式函数
def sanitize(time_string):
if '-' in time_string:
splitter = '-'
elif ':' in time_string:
splitter = ':'
else:
return(time_string)
(mins, secs) = time_string.split(splitter)
return (mins + '.' + secs)
for each_tin in james:
clean_james.append(sanitize(each_t))
更简便的方法是: (列表推到)
clean_james = [sanitize(each_t) for each_t in james]
在列表中, 前边部分是for循环中每一部分的转换, 后边是一个for循环, 类似的还有:
secs = [m * 60 for m in mins]
upper = [s.upper() for s in lower]
注意, 不能使用 sorted(sanitize(t)), 应该记住, 一次只会对一个列表项完成转换, 而不是对整个列表. sorted()函数是对一列表序, 而不是针对单个的数据项.
如何删除重复项
集合
除了列表, python还提供了集合数据结构, 它的表现类似于在数学课上学到的集合. python中集合最突出的特性是集合中的数据项是无序的. 而且不许重复, 如果试图向一个集合增加一个数据项, 而该集合中已经包含有这个数据项, python就会忽略.
distances = set() #空集合, set 是内置函数, 工厂函数, 工厂函数用于创建某种类型的新的数据项(对象)
也可以 distances = {10.6, 11, 8, "two", 7}
distances = set(james) # james 中所有的重复项, 都会被去除
列表, 我们知道正常的数组, a[0], a[1] 等等, 但是在python中可以使用 a[0:3] 这表示要 a[0], a[1], a[2]
定制数据对象 (打包代码和数据)
字典, key : value 的关联关系. (也叫 "映射", "散列")
cal = {} #空字典
pel = dict() # 工厂函数, 创建了一个空字典
通过 key, value 关联
cal['Name'] = 'John cla'
cal['Address'] = ['aa','bb','cc']
pel = {'Name':'haha', 'Address':'shen'}
print(cal['Address'][-1]) # 'cc'
与列表不同, python 字典不会维持插入的顺序, 关于字典, 重点是它会维护关联关系, 而不是顺序.
把代码与数据放在一起是对的, 毕竟, 函数只有在数据关联时才有意义. 不过怎么做到呢? 类
类
class 创建对象, 每个定义的类都有一个特殊的方法, 名为 __init__(), 可以通过这个方法控制初始化.
class Athlete:
def __init__(self):
# initialize
创建实例: a = Athlete() #工厂函数
定义一个类, 实际上是在定制工厂函数, 然后可以在你的代码中使用这个工厂函数创建实例:
a = Athlete(), python 处理这行代码时, 把工厂函数调用转换为以下调用, 明确了类, 方法(自动设置为__init__())和所处理的对象实例: Athlete().__init__(a) # 其中 a 是对象标识符
在来看看 __init__() 方法:
def __init__(self):
# The code to initialize an "Athlete" object.
注意, 实参 a 被赋值给了目标标识符 self. 这是一个非常重要的参数赋值, 如果没有这个赋值, python解释器无法得出方法调用要应用到哪个对象实例. 注意, 类代码设计为在所有对象实例间共享, 方法共享, 而属性不共享. self参数可以帮助标识符要处理哪个对象实例的数据.
实际上, 不仅仅__init__()方法需要self作为它的第一个参数, 类中定义的所有其他方法也是如此.
python 要求每个方法的第一个参数为调用对象实例.
与C++系列语言不同, python中没有定义构造函数"new"的概念, python会为你完成对象的构建, 然后你可以使用__init__()方法定制对象初始状态.
self 指向被创建的实例
python 要求每个方法的第一个参数为self. (这里指的是python执行的代码)
class Athlete:
def __init__(self, value=0):
self.thing = value
def how_big(self):
return(len(self.thing))

继承
class NamedList(list): #这就继承了
def __init__(self, a_name):
list.__init__([]) # 首先, 初始化被继承的这个类
self.name = a_name # 接着, 初始化本类
检查这个类的性质, 你会发现
johnny = NameList("John Paul Jones")
type(johnny)
输出:
<class '__main__'.NamedList> # 是的 johnny 是一个 NamedList 类
dir(johnny), 可以看到很多函数(来源于list), 可以直接调用这个函数
headfirst python 05, 06的更多相关文章
- python进阶06 常用问题库(2)datetime模块 base64
python进阶06 常用问题库(2)datetime模块 base64 一.datetime模块(时间) 1.datetime.time() t=datetime.time(20,43,30,1) ...
- python笔记06
python笔记06 数据类型 上个笔记内容补充 补充 列表 reverse,反转. v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) v1 ...
- Python函数06/装饰器
Python函数06/装饰器 目录 Python函数06/装饰器 内容大纲 1.装饰器 1.1 开放封闭原则 1.2 装饰器 2.今日练习 内容大纲 1.装饰器 1.装饰器 1.1 开放封闭原则 扩展 ...
- Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法
Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...
- 2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】
吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障! 04正在酝酿中!!!马上更新!!!!! 01题意:有一个n个点的图,对于任意两个不同的点,他的权值是两个点下标的最小公倍数,求最小生出 ...
- python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
来啦,老弟 我们已经知道怎么使用 Requests 进行各种请求骚操作 也知道了对服务器返回的数据如何使用 正则表达式 来过滤我们想要的内容 ... 那么接下来 我们就使用 requests 和 re ...
- Python深入06 Python的内存管理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...
- Python补充06 Python之道
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录 ...
- Python学习06——列表的操作(2)
笨办法学Python第39节 之前用的第三版的书,昨天发现内容不对,八块腹肌又给我下了第四版,这次的内容才对上.本节的代码如下: ten_things = "Apples Oranges C ...
随机推荐
- C#:几种数据库的大数据批量插入(转)
在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解 ...
- SQL 查询存储过程
select distinct name from syscomments a,sysobjects b where a.id=b.id and b.xtype='p' --and text like ...
- SQLite中的SELECT子句使用别名
SQLite中的SELECT子句使用别名 开发者可以使用AS关键字为指定的列名提供一个新的别名,其语法形式如下 SELECT column_name AS Alias [,…] 例如,下面的SQL语句 ...
- RBF(径向基)神经网络
只要模型是一层一层的,并使用AD/BP算法,就能称作 BP神经网络.RBF 神经网络是其中一个特例.本文主要包括以下内容: 什么是径向基函数 RBF神经网络 RBF神经网络的学习问题 RBF神经网络与 ...
- ARC 101E.Ribbons on Tree(容斥 DP 树形背包)
题目链接 \(Description\) 给定一棵\(n\)个点的树.将这\(n\)个点两两配对,并对每一对点的最短路径染色.求有多少种配对方案使得所有边都至少被染色一次. \(n\leq5000\) ...
- HDU.3516.Tree Construction(DP 四边形不等式)
题目链接 贴个教程: 四边形不等式学习笔记 \(Description\) 给出平面上的\(n\)个点,满足\(X_i\)严格单增,\(Y_i\)严格单减.以\(x\)轴和\(y\)轴正方向作边,使这 ...
- BZOJ.1901.Dynamic Rankings(线段树套平衡树 Splay)
题目链接or Here 题意:n个数,有两个操作:1.修改某个数为v:2.询问一段区间第k小的数 如果没有修改,则可以用线段树,每个节点P[a,b]存储大小为b-a+1的数组,代表其中的数 同时,这个 ...
- failed to load class "org.sl4j.impl.StaticLoggerBinder"
(1)要确保有properties文件在你的主项目的src下面 (2)https://www.slf4j.org/codes.html(这个是配置相关文件) (3)如果经过1.2步后问题依然存在,那么 ...
- oracle case when 用法
原文:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html 1. CASE WHEN 表达式有两种形式 --简单Case函数 ...
- Oozie分布式工作流——从理论和实践分析使用节点间的参数传递
Oozie支持Java Action,因此可以自定义很多的功能.本篇就从理论和实践两方面介绍下Java Action的妙用,另外还涉及到oozie中action之间的参数传递. 本文大致分为以下几个部 ...