日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

《Head First Python》第五章--理解数据

發布時間:2025/3/16 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Head First Python》第五章--理解数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先給個數據鏈接:Head First Python 數據集

第五章的問題是幫助Kelly教練獲得每個運動員跑得最快的三個時間

數據集:





  • 首先,數據雜亂無章先進行初步處理
  • 按逗號分隔;
  • 把冒號、‘-’都換成‘.’,統一數據格式;
  • 排序

  • # 時間格式化函數 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)# 讀取文件內的時間數據 try: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(',') except IOError as err:print("File Error: " + str(err))c_james = [] c_julie = [] c_mikey = [] c_sarah = []# 列表轉換 for each_item in james:c_james.append(sanitize(each_item)) for each_item in julie:c_julie.append(sanitize(each_item)) for each_item in mikey:c_mikey.append(sanitize(each_item)) for each_item in sarah:c_sarah.append(sanitize(each_item)) # 排序輸出 print(sorted(c_james)) print(sorted(c_julie)) print(sorted(c_mikey)) print(sorted(c_sarah))
    • 推導列表
    • 上面在做列表轉換時,依然有點復雜,代碼重復多,下面我們采用列表推導的方式進行列表轉換
    # 時間格式化函數 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)# 讀取文件內的時間數據 try: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(',') except IOError as err:print("File Error: " + str(err))# 列表轉換 c_james = [sanitize(each_item) for each_item in james] c_julie = [sanitize(each_item) for each_item in julie] c_mikey = [sanitize(each_item) for each_item in mikey] c_sarah = [sanitize(each_item) for each_item in sarah]# 排序輸出 print(sorted(c_james)) print(sorted(c_julie)) print(sorted(c_mikey)) print(sorted(c_sarah))
    • 再回到最初的問題上:最快的三個時間(顯然也不能重復)
    • 最快的三個時間很簡單,用c_james[0:3]就可以得到,但是,這里存在著重復數據,怎樣去除重復呢?
    • 一個辦法是使用迭代的辦法,每當插入數據時,先判斷這個數據在列表中是否已存在,存在則舍棄
    # 時間格式化函數 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)# 讀取文件內的時間數據 try: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(',') except IOError as err:print("File Error: " + str(err))# 列表轉換 james = sorted([sanitize(each_item) for each_item in james]) julie = sorted([sanitize(each_item) for each_item in julie]) mikey = sorted([sanitize(each_item) for each_item in mikey]) sarah = sorted([sanitize(each_item) for each_item in sarah])# 排序輸出 u_james = [] for t in james:if t not in u_james:u_james.append(t) print(u_james[0:3]) u_julie = [] for t in julie:if t not in u_julie:u_julie.append(t) print(u_julie[0:3]) u_mikey = [] for t in mikey:if t not in u_mikey:u_mikey.append(t) print(u_mikey[0:3]) u_sarah = [] for t in sarah:if t not in u_sarah:u_sarah.append(t) print(u_sarah[0:3])
    • 此外,Python還給我們提供了集合,集合的特點是無序、無重復
    • set() 創建一個空集合
    # 時間格式化函數 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)# 讀取文件內的時間數據 try: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(',') except IOError as err:print("File Error: " + str(err))# 列表轉換、排序、輸出 james = sorted(set([sanitize(each_item) for each_item in james]))[0:3] print(james) julie = sorted(set([sanitize(each_item) for each_item in julie]))[0:3] print(julie) mikey = sorted(set([sanitize(each_item) for each_item in mikey]))[0:3] print(mikey) sarah = sorted(set([sanitize(each_item) for each_item in sarah]))[0:3] print(sarah)
    • 文件讀取部分依然有許多重復,封裝文件讀取部分
    # 時間格式化函數 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 reader(file):try:with open(file) as datafile:return (datafile.readline().strip().split(','))except IOError as err:print("File Error: " + str(err))return (None) # 讀取文件內的時間數據 james = reader('james.txt') julie = reader('julie.txt') mikey = reader('mikey.txt') sarah = reader('sarah.txt')# 列表轉換、排序、輸出 james = sorted(set([sanitize(each_item) for each_item in james]))[0:3] print(james) julie = sorted(set([sanitize(each_item) for each_item in julie]))[0:3] print(julie) mikey = sorted(set([sanitize(each_item) for each_item in mikey]))[0:3] print(mikey) sarah = sorted(set([sanitize(each_item) for each_item in sarah]))[0:3] print(sarah)
    • BULLET POINTS
    • 排序的兩種方法,list.sort()"原地"排序,sorted(list)“復制”排序,幾乎可以對任何數據結構排序。
    • 向sort()或sotred()傳入reverse=True可以按降序排序。
    • 如果有一下代碼
    new_l = [] for t in old_l:new_l.append(len(t))

    使用列表推導重寫這個代碼,可以寫作:

    new_l = [len(t) for t in old_l]

    • 要訪問列表中多個數據,可以使用分片。例如:my_list[0:3],這會訪問0,1,2三個位置的數據。

    • 使用set()工廠方法可以創建一個集合。

    總結

    以上是生活随笔為你收集整理的《Head First Python》第五章--理解数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。