Python案例篇:七個Python高階案例
一、排序及自定義函數(shù)之案例一:選擇排序
案例一:選擇排序 使用選擇排序的思想實(shí)現(xiàn)列表數(shù)據(jù)的升序排序
參考代碼:
lt=[45,12,56,-32,-3,44,75,-22,100]
length=len(lt)
# print('排序前:'+str(lt))
for?i?in?range(0,length-1):
????#內(nèi)層循環(huán)呢控制每一輪執(zhí)行的次數(shù),j可以認(rèn)為是比較空間或箭頭
????for?j?in?range(i+1,length):
????????#判斷兩空間中的內(nèi)容,如果選中空間比比較空間中的數(shù)據(jù)大,則交換數(shù)據(jù)
????????if?lt[i]>lt[j]:
????????????#temp=lt[i]
????????????#lt[i]=lt[j]
????????????#lt[j]=temp
????????????lt[i],lt[j]=lt[j],lt[i]
# print('排序后:'+str(lt))
二、匿名函數(shù)的定義和使用
需求:字符串?dāng)?shù)據(jù)’This is \n a \latiao’ --> 得到’This is a test’ 步驟一:使用字符串的split()函數(shù)–>作用:可以默認(rèn)去除字符串中的空格、\n、\t等內(nèi)容 然后將字符串?dāng)?shù)據(jù)以列表的形式返回
步驟二:使用字符串的join()函數(shù)–>以空格作為連接的格式,將列表中的元素連接成為一個字符串?dāng)?shù)據(jù)返回
str1='this?is?\na?\latiao'
lt=str1.split()
print(lt)
?
str2='?'.join(lt)
print(str1,type(str1))
print(str2,type(str2))
?
print(lambda?x:'?'.join(x.split())(str1))
三、高階函數(shù)練習(xí)題
1.lt?=?['sdfasdfa',?'ewqrewrewqr',?'dsafa12312fdsafd',?'safsadf']
–> 得到長度列表
2.tp?=?('TOM',?'Lilei',?'JAck',?‘HanmeiMeI’)
–> 得到列表(所有元素的首字母大寫)
3.
lt1?=?[1,2,3,4]
lt2?=?[5,6,7,8]
計(jì)算得到:lt1[0]lt2[0]?+ lt1[1]lt2[1]?+ ...
?15?+?26?+
最終得到累加以后的值 參考代碼:
from?functools?import?reduce
lt?=?['sdfasdfa',?'ewqrewrewqr',?'dsafa12312fdsafd',?'safsadf']
print(list(map(len,lt)))
?
tp?=?('TOM',?'Lilei',?'JAck','HanmeiMeI')
?
#自定義函數(shù):
def?func(name):
????return?name.capitalize()
?
print(list(map(func,tp)))
print(list(map(lambda?x:x.capitalize(),tp)))
print(list(map(str.capitalize,tp)))
?
lt1=[1,2,3,4,5]
lt2=[5,6,7,8]
?
#使用map的思想得到組合數(shù)據(jù)對象(map類型),對象中的元素內(nèi)容為:15 26 37 48
lt1_map=map(lambda?x:x*10,lt1)?#map中的內(nèi)容為:10,20,30,40
ret_map=map(lambda?x,y:x+y,lt1_map,lt2)?#map中的內(nèi)容為:15,26,37,48
print(list(lt1_map))
print(list(ret_map))
?
#使用reduce的思想將map對象中的數(shù)據(jù)進(jìn)行累加
num=reduce(lambda?x,y:?x?+?y,ret_map)
print('和值為:?%s'?%num)
四、高階函數(shù)練習(xí)題
高階函數(shù)以及匿名函數(shù)之間的配合使用
from?functools?import?reduce
#模塊一:lambda和filter的結(jié)合使用
#lt?=?[1,2,3,4,5,6,7,8,9]?-->?[3,6,9]]
lt?=?[1,2,3,4,5,6,7,8,9]
print(list(filter(lambda?x:x%3==0,lt)))
?
#模塊二:lambda和map的結(jié)合使用
#容器/序列對象:range對象
mo=map(lambda?x:x**2,range(5))
print(list(mo))
?
#模塊三:
'''
在模塊二的基礎(chǔ)上擴(kuò)展功能:range(10)
過濾以后保留的數(shù)據(jù)范圍為:(5,50)之間
'''
mo=map(lambda?x:x**2,range(10))
fo=filter(lambda?x:x>5?and?x<50,mo)
print(list(fo))
?
#模塊四:lambda和reduce配合使用
lt=[1,2,3,4,5]
my_sum=reduce(lambda?x,y:x+y,lt)
print(my_sum)
五、求兩個列表元素的和,返回新列表
參考代碼:
lt1=[1,2,3,4]
lt2=[5,6]
print(list(map(lambda?x,y:x+y,lt1,lt2)))
六、求字符串中每個單詞的長度
參考代碼:
content?=?'Welcome?To?latiao'
word_list=content.split()
mo=map(len,word_list)
print(list(mo),type(mo))
七、接收函數(shù)作為參數(shù),或者將函數(shù)作為返回值
接收函數(shù)作為參數(shù),或者將函數(shù)作為返回值
#?創(chuàng)建一個列表
l?=?[1,2,3,4,5,6,7,8,9,10]
#?定義一個函數(shù),用來檢查一個任意的數(shù)字是否是偶數(shù)。
def?fn2(i)?:
????if?i?%?2?==?0?:
????????return?True
????return?False????
#?這個函數(shù)用來檢查指定的數(shù)字是否大于5
def?fn3(i):
????if?i?>?5?:
????????return?True????
????return?False
#?這個函數(shù)可以將3的倍數(shù)取出
def?fn4(i):
????if?i?%?3?==?0?:
????????return?True
????return?False
def?fn(func?,?lst)?:#?定義高階函數(shù)fn
????#?創(chuàng)建一個新列表
????new_list?=?[]
????#?對列表進(jìn)行篩選
????for?n?in?lst?:
??????new_list.append(n)
????#?返回新列表
????return?new_list
#此時就可以隨意調(diào)用不同的函數(shù)來獲得不同的結(jié)果了,
#只需要改變高階函數(shù)fn的兩個參數(shù)即可。?????
print(fn(fn4?,?l))#此時調(diào)用的是fn4,列表是l,即意味著取出l列表中所有能被3整除的數(shù)。
評論
圖片
表情
