国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

HeadFirstPython學(xué)習(xí)筆記4——處理數(shù)據(jù)

2019-11-14 16:59:25
字體:
供稿:網(wǎng)友

有這么幾組數(shù)據(jù)需要你處理:

James  2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22

Julia   2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21

Mikey  2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38

Sarah  2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55

這是他們四個(gè)人跑600米花費(fèi)的時(shí)間,現(xiàn)在需要用python實(shí)現(xiàn)找到每個(gè)選手跑得最快的三個(gè)時(shí)間。

首先,自然是分解數(shù)據(jù),用split(",")得到列表。然后排序,說道排序,python里有兩種排序方法:

1.原地排序:列表方法sort()排序完成后會(huì)替換掉原來的數(shù)據(jù),原有順序會(huì)消失

2.復(fù)制排序:內(nèi)置函數(shù)sorted(),復(fù)制原有數(shù)據(jù),在排序完成后返回,原有數(shù)據(jù)和順序依然保留

打開IDLE試試下面的代碼:

>>> data=[1,2,7,5,3,8]>>> sorted(data)>>> data.sort()>>> data

那么接下來試試給上面的選手?jǐn)?shù)據(jù)排序吧。

排序結(jié)果肯定不行,因?yàn)闆]有處理列表里的數(shù)據(jù),仔細(xì)看數(shù)據(jù),有2-34,3:21,2.34這些符號(hào)不同,所以要先統(tǒng)一符號(hào)。

統(tǒng)一成數(shù)字吧,這樣最方便排序了。想想前面學(xué)的的東西,要怎么處理呢?關(guān)鍵字:循環(huán)、替換

def sanitize(timestr):    if ("-" in timestr) or (":" in timestr):        return timestr.replace("-", ".").replace(":", ".")    else:        return timestrnewdata=[]def sortdata(data):    for item in data:        newdata.append(sanitize(item))
  return newdata

2.函數(shù)串鏈,同方法串鏈,但函數(shù)串鏈?zhǔn)菑挠蚁蜃髨?zhí)行,如:print(sorted(newdata))先用sorted函數(shù)對(duì)newdata排序,然后print函數(shù)打印

另外sort()和sorted()默認(rèn)都是升序排列,如果需要降序,則需要傳入?yún)?shù)reverse=True

如果你嫌循環(huán)的代碼太多的話(這也叫多?)可以使用列表推導(dǎo):

def sortdata(data):    newdata = [sanitize(item) for item in data]
  #      首先是轉(zhuǎn)換    使用循環(huán)表示所有項(xiàng)都進(jìn)行轉(zhuǎn)換  最后返回列表 return newdata

 你可以試試列表推導(dǎo),比如將列表里的所有值乘以2,轉(zhuǎn)換列表大小寫等等。列表推導(dǎo)真的非常強(qiáng)大。不過也不是完滿無缺,列表推導(dǎo)會(huì)轉(zhuǎn)換列表內(nèi)的所有值,所以如果你只想改變符合條件的值,還是用循環(huán)迭代吧

好了,排序完成,就可以取出前3的數(shù)據(jù)了,還記得嗎newdata[0,3](再啰嗦一下:包含左邊不含右邊)

但還有一個(gè)問題:重復(fù)項(xiàng)。可以用循環(huán)判斷,但這樣太麻煩了,python已經(jīng)給我們提供了集合來解決問題。

集合里的數(shù)據(jù)是不允許重復(fù)的,如果想往集合里添加重復(fù)項(xiàng),集合會(huì)忽略。

result=set(newdata)

創(chuàng)建集合用set()函數(shù),把列表里的數(shù)據(jù)放入集合,他會(huì)自動(dòng)幫你去除重復(fù)項(xiàng),然后在進(jìn)行排序取前3,這里你能自己解決嗎?

總結(jié):

1.原地排序:排序后替換,復(fù)制排序:排序后返回,參數(shù)reverse=True可以實(shí)現(xiàn)降序排序

2.方法串鏈:從左至右,對(duì)數(shù)據(jù)應(yīng)用一組方法,函數(shù)串鏈:從右至左,對(duì)數(shù)據(jù)應(yīng)用一組函數(shù)

3.如果要轉(zhuǎn)換整個(gè)列表里的值,可以使用列表推導(dǎo)

4.訪問列表里的多個(gè)數(shù)據(jù)項(xiàng)可以使用分片mylist[3,6](含左不含右)

5.使用set()可以創(chuàng)建一個(gè)集合,集合是不允許重復(fù)數(shù)據(jù)項(xiàng)的

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 肇庆市| 阿拉善右旗| 永寿县| 宝兴县| 册亨县| 成武县| 林甸县| 贺兰县| 双鸭山市| 蓝山县| 宁晋县| 霍城县| 巴南区| 雷州市| 永吉县| 贺兰县| 土默特右旗| 澄迈县| 遂溪县| 定远县| 车致| 河曲县| 成安县| 福泉市| 瓦房店市| 台北市| 寿宁县| 新丰县| 金寨县| 万盛区| 衡东县| 玉环县| 西乡县| 通江县| 南安市| 梁河县| 子洲县| 重庆市| 特克斯县| 泗阳县| 克东县|