14、方法串链:julie = data.strip().split(‘,’) 第一个方法strip()除去data中的空白,之后,除去空白符的结果由第二个方法split(‘,’)处理,会得到一个列表,再将所得到的列表应用到以上代码的目标标示符,也就是julie。方法串链是从左往右读。
15、函数串链:允许数据应用一系列的函数,每个函数会取得数据,对它完成某个操作,然后把转换后的数据继续向下传递到下一个函数。函数串链是从右往左读。
16、Python集合中的数据是无序的,且不允许重复,如果试图向一个集合中增加一个已经存在的数据项,Python会忽略这个添加请求。
17、工厂函数:工厂函数用于创建某种类型的新的数据项,例如:set()就是一个工厂函数,因为它会创建一个新的集合。
distance = set()
distance = {10.6,11,8,10.6,'two'}
18、列表推导:在一行上指定一个转换
19、分片:从一个列表访问多个列表项
#打印第3项、第4项、第5项
print(my_list[3:6])
20、集合:一组无序的数据项,其中不包含重复项。distance[] = set()
21、字典:一个内置的数据结构(置于Python中),允许将数据与键而不是数字相关联。这样可以使得内存中的数据与实际数据的结构保持一致。详见28。
默认的sort方法和sorted BIF是按照升序来排列的,也可以按降序来排列。设置这两个函数的参数reverse=True,就能按照降序来排序。
在DILE中输入以下数据,来测试:
>>> data = [6,8,6,9,4,10,2,3]
>>> data
>>> [6,8,6,9,4,10,2,3]
>>> data.sort() #原地排序,源数据丢失。
>>> data
>>> [2,3,4,6,6,8,9,10]
>>> data = [6,8,6,9,4,10,2,3]
>>> data2 = data.sorted()#复制排序,源数据还在。
>>> data2
>>> [2,3,4,6,6,8,9,10]
>>> data
>>> [6,8,6,9,4,10,2,3]
待处理的数据:m-ss或者是m:ss
目标数据:m.ss
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)
改进之后的时间排序Python程序
import pickle
import Test
james = []
julie = []
mikey = []
sarah = []
data = []
try:
#先将数据读出来到james_data、julie_data、mikey_data、sarah_data
with open('james.txt','r') as james_data, open('julie.txt','r') as julie_data, open('mikey.txt','r') as mikey_data, open('sarah.txt','r') as sarah_data:
#然后调用readline方法存到data里面
data = james_data.readline()
#再利用strip方法去空格,split方法按照,分行存进列表里
james = data.strip().split(',')
data = julie_data.readline()
julie = data.strip().split(',')
data = mikey_data.readline()
mikey = data.strip().split(',')
data = sarah_data.readline()
sarah = data.strip().split(',')
clean_james = []
clean_julie = []
clean_mikey = []
clean_sarah = []
#设置一个for循环,利用sanitize来格式化时间数据
for each_t in james:
clean_james.append(Test.sanitize(each_t))
for each_t in julie:
clean_julie.append(Test.sanitize(each_t))
for each_t in mikey:
clean_mikey.append(Test.sanitize(each_t))
for each_t in sarah:
clean_sarah.append(Test.sanitize(each_t))
# Test.print_lol(sorted(clean_james))
print(sorted(clean_james))
print(sorted(clean_julie))
# Test.print_lol(sorted(clean_julie))
print(sorted(clean_mikey))
# Test.print_lol(sorted(clean_mikey))
print(sorted(clean_sarah))
# Test.print_lol(sorted(clean_sarah))
except IOError as err:
print('IOError is '+str(err))
except pickle.PickleError as perr:
print('PickleError is '+str(perr))
1)、创建一个新的列表来存放转换后的数据
2)、迭代处理原列表中的各个数据项
3)、每次迭代时完成转换
4)、将转换后的数据追加到新的列表中
>>> mins = [1,2,3]
>>> secs = [m*10 for m in mins]
>>> sece
>>> [10,20,30]
#列表迭代 初始代码:
clean_mikey = []#创建
for each_t in mikey:#迭代
clean_mikey.append(sanitize(each_t))#append负责追加 sanitize负责转换
#列表推导 用推导列表重构之后的代码:
clean_mikey = [sanitize(each_t) for each_t in mikey]
# 创建 | 转换 | 开始循环迭代(追加会自动完成)
4、辨析:当列表中的每一项都必须完成一个转换的时候,建议使用列表推导。但是列表迭代更为灵活。
一个内置的数据结构(置于Python中),允许将数据与键而不是数字相关联。这样可以使得内存中的数据与实际数据的结构保持一致。
>>> cleese = {}
#或者使用工厂函数
>>> palin = dict()
#通过键与值的关联,想这两个字典分别添加数据
#键值分开的情况
>>> cleese['Name'] = 'John Cleese'
>>> cleese['Occupation'] = ['actor','writer']
#键值一起的情况,最外面用的是{}
palin = {'Name':'Michael Palin','Occupation':['comedian','tv']}
#在DILE中调用查看
>>> palin['Name']
>>> 'Michael Palin'
#0前面的那个就是-1,也就是最后一个
>>> cleese['Occupation'][-1]
>>> 'writer'
#追加数据,添加额外的键值数据
>>> palin['Birthplace'] = 'Broomhill, Sheffield, England'
>>> cleese['Birthplace'] = 'Weston-super-Mare, North Somerset, England'
与列表不同,Python字典是不会维持插入顺序的,这会导致一些意外,关于字典,重点是维护关联关系,而不是顺序
import pickle
from Test import sanitize
from Test import ReadData
james = []
julie = []
mikey = []
sarah = []
data = []
try:
#先使用ReadData函数读入数据,在ReadData函数内部直接调用字典函数DataDictionary来完成字典创建
james = ReadData('james2.txt')
julie = ReadData('julie2.txt')
mikey = ReadData('mikey2.txt')
sarah = ReadData('sarah2.txt')
print(james['Name']+'\'s fastest times are:'+str(sorted(set([sanitize(each_t) for each_t in james['Times']]))[0:3]))
print(julie['Name']+'\'s fastest times are:'+str(sorted(set([sanitize(each_t) for each_t in julie['Times']]))[0:3]))
print(mikey['Name']+'\'s fastest times are:'+str(sorted(set([sanitize(each_t) for each_t in mikey['Times']]))[0:3]))
print(sarah['Name']+'\'s fastest times are:'+str(sorted(set([sanitize(each_t) for each_t in sarah['Times']]))[0:3]))
except IOError as err:
print('IOError is '+str(err))
except pickle.PickleError as perr:
print('PickleError is '+str(perr))