处理数据

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的更多相关文章

  1. python进阶06 常用问题库(2)datetime模块 base64

    python进阶06 常用问题库(2)datetime模块 base64 一.datetime模块(时间) 1.datetime.time() t=datetime.time(20,43,30,1) ...

  2. python笔记06

    python笔记06 数据类型 上个笔记内容补充 补充 列表 reverse,反转. v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) v1 ...

  3. Python函数06/装饰器

    Python函数06/装饰器 目录 Python函数06/装饰器 内容大纲 1.装饰器 1.1 开放封闭原则 1.2 装饰器 2.今日练习 内容大纲 1.装饰器 1.装饰器 1.1 开放封闭原则 扩展 ...

  4. Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法

    Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...

  5. 2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】

    吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障! 04正在酝酿中!!!马上更新!!!!!  01题意:有一个n个点的图,对于任意两个不同的点,他的权值是两个点下标的最小公倍数,求最小生出 ...

  6. python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

    来啦,老弟 我们已经知道怎么使用 Requests 进行各种请求骚操作 也知道了对服务器返回的数据如何使用 正则表达式 来过滤我们想要的内容 ... 那么接下来 我们就使用 requests 和 re ...

  7. Python深入06 Python的内存管理

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...

  8. Python补充06 Python之道

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录 ...

  9. Python学习06——列表的操作(2)

    笨办法学Python第39节 之前用的第三版的书,昨天发现内容不对,八块腹肌又给我下了第四版,这次的内容才对上.本节的代码如下: ten_things = "Apples Oranges C ...

随机推荐

  1. 12,EasyNetQ-自动订阅

    EasyNetQ自v0.7.1.30附带一个简单的AutoSubscriber. 您可以使用它轻松扫描实现接口IConsume <T>或IConsumeAsync <T>的类的 ...

  2. Python3练习题系列(05)——设计和调试规则

    If 语句的常见规则 1. 每一个“if 语句”必须包含一个else: 2. 如果这个else 永远都不应该被执行到,因为它本身没有任何意义,那你必须在else 语句后面使用一个叫做die 的函数,让 ...

  3. [COGS2554][SYZOJ247][福利]可持久化线段树

    思路: 主席树模板. 注意内存的分配,原始的线段树有$2n$个结点,每次更新时最多增加$log(n)$个结点,总共有$q$次询问,所以存储结点的数组大小为$2N+q log(n)$. #include ...

  4. 几种Unity运行平台的判断

    这里就介绍几种常见的,也是便于使用的几种平台判断的方法. 1.先说第一种,也是我用的顺手的一个.利用RuntimePlatform判断,API上的解释是[The platform applicatio ...

  5. AngularJS中巧用ngModel的$asyncValidators属性写一个验证唯一性的Direcitve

    有这样的一个需求:添加用户的时候,根据主键判断当前添加用户的email是否已经被使用. 为此,我们需要把主键和email来传递给远程的一个API,让API返回结果,告之当前email是否被使用过. 写 ...

  6. 微信小程序页面带参数跳转及接收参数内容navigator

    功能从index页面跳转到draw页面,并在draw页面获取id及imgUrl index.wxml <navigator class='looks-view' wx:for="{{i ...

  7. 递归与迭代的联系以及优缺点(以c++为例)

    1.递归的定义: 程序直接或间接的调用自身的方法. 递归算法的特点:(1) 递归就是在过程或函数里调用自身.(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口.(3) 递归算法解题通 ...

  8. 微软BI 之SSIS 系列 - 平面文件格式的区别(Delimited,Fixed width,Ragged Right, Fixed width ...)

    开篇介绍 SSIS 中处理文件,一般在描述输出平面文件格式的时候通常会出现以下几种选项: Delimited - 默认输出列使用逗号分隔,也可以选择其它的诸如 | ,或者 Tab 等. Fixed W ...

  9. linux修改目录为可读写

    发布到linux上遇到的问题, 上传目录没有写入权限 新建目录 mkdir /guangkuo/html/portal/images/upload 改为可读写 chmod -R a+w /guangk ...

  10. armeabi和armeabi-v7a(转)

    在ANE中如果SDK调用了so库,则需要把so库放到ANE下Android-ARM/lib/armeabi (调试模式)或者 armeabi-v7a(发行模式)下. 可以贴个ADT代码说明问题: // ...