
1.排序有兩種方式
原地排序(in-place sorting),按指定的順序排列數(shù)據(jù)起趾,然后用排序后的數(shù)據(jù)替換原來的數(shù)據(jù)粟耻。原來的順序會丟失渣慕。
sort()
復(fù)制排序(copied sorting),按你指定的順序排序,然后返回原數(shù)據(jù)的一個有序副本裂逐。原數(shù)據(jù)的順序依然保留歹鱼。
sorted()
方法串聯(lián)(method chaining)
第一個方法應(yīng)用到數(shù)據(jù)中,然后再將處理好的數(shù)據(jù)應(yīng)用到第二個方法中卜高。從左向右讀弥姻。
例子:
data.strip().split(',')
函數(shù)串聯(lián)(function chaining)
每個函數(shù)會取得數(shù)據(jù),對他完成某個操作掺涛,然后把轉(zhuǎn)換后的數(shù)據(jù)繼續(xù)向下傳遞到下一個函數(shù)庭敦。 從右向左讀。
例子:
print(sorted(james))
2.數(shù)據(jù)不一致導(dǎo)致排序中出現(xiàn)問題薪缆,需要整理數(shù)據(jù)
創(chuàng)建一個函數(shù)秧廉,傳入時間參數(shù),然后將不一致的(-拣帽,:)數(shù)據(jù)清除掉疼电,然后將其分割為分和秒,然后整合在一起减拭,形成統(tǒng)一時間格式 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.不過代碼看來十分臃腫,學(xué)會使用推導(dǎo)列表
clean_mikey = []
for each_t in mikey:
clean_mikey.append(sanitize(each_t))
變成
clean_mikey = [sanitize(each_t) for each_t in mikey]
新列表 轉(zhuǎn)換方法 for循環(huán) 列表
append動作隱含在里面了峡谊。
推導(dǎo)列表有點奇怪茫虽,不過寫多幾次就熟悉了。
[m * 60 for m in mins]
[s.upper() for s in lower]
[float(s) for s in clean]
使用推導(dǎo)列表后既们,程序簡化了
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.只需要前三項數(shù)據(jù)
可以使用列表分片
如:
james[0:3]
5.刪除重復(fù)項
有2種方法:
1.用集合的方法濒析,集合的特性是數(shù)據(jù)是無序的,而且不允許重復(fù)啥纸。
james = {10.6,11,10.6}
distances = set(james) #set()就是集合的方法
這樣distances出來的數(shù)據(jù)就是無序且不重復(fù)的号杏。
2.用遍歷的方法
unique_james = []
for each_t in james:
if each_t not in unique_james: #判斷是否在數(shù)組中,不在就放進新的數(shù)組
unique_james.append(each_t)
BTW:
python中有兩種類型的列表,一種是可以改變的列表(用中括號包圍)盾致,一種是不可改變的列表(用小括號包圍)-叫元組tuple主经,還有一種不是列表,是集合庭惜,用大括號包圍罩驻。
原文引用:http://www.godblessyuan.com/2015/04/27/head_first_python_chapter_5_learning/