head first python(第五章)–学习笔记

作者: dnaEMx | 来源:发表于2015-05-15 00:45 被阅读679次

    1.排序有两种方式

    原地排序(in-place sorting),按指定的顺序排列数据,然后用排序后的数据替换原来的数据。原来的顺序会丢失。

    sort()
    

    复制排序(copied sorting),按你指定的顺序排序,然后返回原数据的一个有序副本。原数据的顺序依然保留。

    sorted()
    

    方法串联(method chaining)

    第一个方法应用到数据中,然后再将处理好的数据应用到第二个方法中。从左向右读。

    例子:

    data.strip().split(',')

    函数串联(function chaining)

    每个函数会取得数据,对他完成某个操作,然后把转换后的数据继续向下传递到下一个函数。 从右向左读。

    例子:

    print(sorted(james))

    2.数据不一致导致排序中出现问题,需要整理数据

    创建一个函数,传入时间参数,然后将不一致的(-,:)数据清除掉,然后将其分割为分和秒,然后整合在一起,形成统一时间格式 MM: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)
    

    然后修改代码

    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)
    
    with open('james.txt') as jaf:
        data = jaf.readline()
    james = data.strip().split(',')
    
    with open('julie.txt') as juf:
        data = juf.readline()
    julie = data.strip().split(',')
    
    with open('mikey.txt') as mif:
        data = mif.readline()
    mikey = data.strip().split(',')
    
    with open('sarah.txt') as saf:
        data = saf.readline()
    sarah = data.strip().split(',')
    
    clean_james = []
    clean_julie = []
    clean_mikey = []
    clean_sarah = []
    
    ---------臃肿的部分------------
    for each_t in james:
        clean_james.append(sanitize(each_t))
    
    for each_t in julie:
        clean_julie.append(sanitize(each_t))
    
    for each_t in mikey:
        clean_mikey.append(sanitize(each_t))
        
    for each_t in sarah:
        clean_sarah.append(sanitize(each_t))
    
    print(sorted(clean_james))
    print(sorted(clean_julie))
    print(sorted(clean_mikey))
    print(sorted(clean_sarah))
    ---------臃肿的部分------------
    

    3.不过代码看来十分臃肿,学会使用推导列表

    clean_mikey = []
    
    for each_t in mikey:
        clean_mikey.append(sanitize(each_t))
    

    变成

    clean_mikey = [sanitize(each_t) for each_t in mikey]
    
    新列表         转换方法            for循环       列表
    

    append动作隐含在里面了。

    推导列表有点奇怪,不过写多几次就熟悉了。

    [m * 60 for m in mins]
    
    [s.upper() for s in lower]
    
    [float(s) for s in clean]
    

    使用推导列表后,程序简化了

    print(sorted([sanitize(t) for t in james]))
    print(sorted([sanitize(t) for t in julie]))
    print(sorted([sanitize(t) for t in mikey]))
    print(sorted([sanitize(t) for t in sarah]))
    

    4.只需要前三项数据

    可以使用列表分片
    如:

    james[0:3]
    

    5.删除重复项

    有2种方法:
    1.用集合的方法,集合的特性是数据是无序的,而且不允许重复。

    james = {10.6,11,10.6}
    
    distances = set(james)  #set()就是集合的方法
    

    这样distances出来的数据就是无序且不重复的。

    2.用遍历的方法

    unique_james = []
    for each_t in james:
        if each_t not in unique_james:  #判断是否在数组中,不在就放进新的数组
            unique_james.append(each_t)
    

    BTW:
    python中有两种类型的列表,一种是可以改变的列表(用中括号包围),一种是不可改变的列表(用小括号包围)-叫元组tuple,还有一种不是列表,是集合,用大括号包围。


    原文引用:http://www.godblessyuan.com/2015/04/27/head_first_python_chapter_5_learning/

    相关文章

      网友评论

        本文标题:head first python(第五章)–学习笔记

        本文链接:https://www.haomeiwen.com/subject/vpgqqttx.html