python進(jìn)階從青銅到王者一定會(huì)用上的Python技巧
每個(gè)案例都有兩種解決方法,第一種方法相對(duì)小白,第二種方法則是屬于有經(jīng)驗(yàn)的高手寫法。
下面有請(qǐng)青銅和王者兩位選手進(jìn)場(chǎng)。各位同學(xué)請(qǐng)對(duì)號(hào)入座~
1.如何判斷一個(gè)列表中的數(shù)值是否全部小于某個(gè)數(shù)
# 1.判斷一個(gè)列表中的數(shù)值是否全部小于某個(gè)數(shù) num = 10 list1 = [1, 1, 5, 5, 7, 1] # 青銅選手 index = 0 for n in list1: if n < num : index += 1 continue else: print("青銅選手", False) break if index == len(list1): print("青銅選手", True) # 王者選手 print("王者選手", all(map(lambda x: x < num, list1)))
青銅選手:最直觀的方法,一個(gè)個(gè)遍歷去判斷列表中的元素是不是小于某個(gè)數(shù)值,太簡(jiǎn)單啦。
王者選手 :利用兩個(gè)Python內(nèi)置函數(shù)+Python匿名函數(shù),一行代碼即可輕松的解決。so easy~
2.如何對(duì)列表中的字符串按照特定要求進(jìn)行排序
# 2.對(duì)列表中的字符串按照特定要求進(jìn)行排序 list2 = ["low", "irving", "james", "durant"] def first_c(str1): return ord(str1[0]) # 青銅選手 冒泡排序 for i in range(len(list2)): for j in range(len(list2) - i - 1): if len(list2[j]) > len(list2[j+1]): list2[j], list2[j+1] = list2[j+1], list2[j] print("青銅選手:", list2) # 王者選手 print("王者選手:", sorted(list2, key=len)) print("按首字母排序:", sorted(list2, key=first_c))
青銅選手:列表中的字符串排序算法就可以搞定啦,例如最經(jīng)典的冒泡排序,腫么樣?
王者選手:利用內(nèi)置函數(shù)sorted一行代碼就解決。不僅如此,對(duì)于排序的關(guān)鍵詞指定方面,我還能自己設(shè)置排序的函數(shù),例如上面的firstC函數(shù),按照字符串的首字母進(jìn)行排序。羨慕不?
3.如何實(shí)現(xiàn)按照鍵或者數(shù)值對(duì)字典進(jìn)行排序
# 3.按照鍵或者數(shù)值對(duì)字典進(jìn)行排序 dict3 = {"low" : 3, "irving": 6, "james": 1, "durant": 4} # 青銅選手 list3 = sorted(dict3.items(), key=lambda x: x[0]) dict3_keys = {i:j for i, j in list3} print("青銅選手 按鍵排序:", dict3_keys) list3 = sorted(dict3.items(), key=lambda x: x[1]) dict3_values = {i:j for i, j in list3} print("青銅選手按值排序:", dict3_values) #王者選手 dict3_keys = {key: dict3[key] for key in sorted(dict3)} print("王者選手按鍵排序:", dict3_keys) dict3_values = {key: dict3[key] for key in sorted(dict3, key=dict3.get)} print("王者選手按值排序:", dict3_values)
青銅選手:這次我用了sorted內(nèi)置函數(shù)進(jìn)行排序后,再轉(zhuǎn)換成字典形式。兩行代碼搞定!
王者選手:青銅選手你的方法在轉(zhuǎn)換的過程中會(huì)造成空間資源浪費(fèi)。我直接利用了對(duì)于鍵或者值進(jìn)行排序,再利用排序后的鍵或者是值來構(gòu)造最終的字典,且程序簡(jiǎn)潔。
4.怎么將列表中的數(shù)字轉(zhuǎn)換成字符串
# 4.將列表中的數(shù)字轉(zhuǎn)換成字符串 list4 = [1, 3, 5, 7, 12, 6] #青銅選手 直接轉(zhuǎn)換 list_str4 = [str(i) for i in list4] print("青銅選手:", list_str4) #王者選手 利用map函數(shù) list_str4 = list(map(str, list4)) print("王者選手:", list_str4)
青銅選手:我用的是列表解析方案,通過循環(huán)迭代的方式產(chǎn)生新的列表。這次夠簡(jiǎn)潔,也不浪費(fèi)空間了吧~~
王者選手:我利用了map內(nèi)置函數(shù),將列表中的數(shù)字轉(zhuǎn)換為字符串。這次咱們算打平吧!
5.如何判斷列表中的元素是否都屬于一個(gè)類型
# 5.判斷列表中的元素是否都屬于一個(gè)類型 list5 = ['1', '3', '5', '7', '12', '6'] # 青銅選手 逐一判斷每個(gè)元素 index = 0 for element in list5: if not isinstance(element, str): print("青銅選手:", False) break index += 1 if index == len(list5): print("青銅選手:", True) # 王者選手 def checkStr(x): if isinstance(x, str): return True else: return False print("王者選手:", all(list(map(checkStr, list5))))
青銅選手:這次我用的方法是逐個(gè)的判斷列表中的每一個(gè)元素,如果有任一個(gè)元素不是字符串,則輸出False。當(dāng)全部循環(huán)結(jié)束后,如果index數(shù)值等于列表總長度,則輸出True。
王者選手:利用map函數(shù)來判斷列表中的每個(gè)元素是否滿足函數(shù)checkStr。利用all函數(shù)來得到最終的結(jié)果。這不是更簡(jiǎn)單?
6.列表怎么反轉(zhuǎn)呢
# 6.反轉(zhuǎn)列表 list6 = ['1', '3', '5', '7', '12', '6'] # 青銅選手 new_list6 = [] for i in range(len(list6)-1, -1, -1): new_list6.append(list6[i]) print("青銅選手:", new_list6) # 王者選手 print("王者選手:", list6[::-1]) list6.reverse() print("王者選手:", list6)
青銅選手:創(chuàng)建一個(gè)新的列表對(duì)象,并將list6中的元素按照從后向前的方式添加到新列表中。
王者選手:我有兩種方式喔,第一種方式是利用列表切片的方法,獲取反轉(zhuǎn)的列表。第二種方式是利用列表的reverse函數(shù),但是reverse函數(shù)只能在原列表中進(jìn)行修改,不能創(chuàng)建一個(gè)新的列表。Yeah~~
7.如何從可迭代對(duì)象中隨機(jī)選擇一個(gè)元素
# 7.從可迭代對(duì)象中隨機(jī)選擇一個(gè)元素 import random random.seed(0) list7 = ['6', '12', '7', '5', '3', '1'] tuple7 = ("low", "irving", "james", "durant") print(random.choice(list7)) print(random.choices(tuple7, k=3)) print(random.sample(list7, k=2))
青銅選手:我不會(huì),交白卷了只能。。。
王者選手:小青同學(xué),搬好凳子認(rèn)真聽講吧!在Python中進(jìn)行隨機(jī)數(shù)值的選擇,可以利用Python的內(nèi)置庫random,上面函數(shù)中,choice函數(shù)是從列表中隨機(jī)選擇一個(gè)數(shù)值,choices函數(shù)又放回的選擇k個(gè)數(shù)值,sample則是無放回的選擇k個(gè)數(shù)值。一共三張姿勢(shì)喔,學(xué)會(huì)了嗎?
8.怎么利用列表創(chuàng)建字典
# 8.利用列表創(chuàng)建字典 list8_1 = ["low", "irving", "james", "durant"] list8_2 = [3, 6, 7, 2] list8_3 = [5, 8, 1, 3] #青銅選手 dict8 = {} for i in range(len(list8_1)): dict8[list8_1[i]] = list8_2[i] print("青銅選手:", dict8) #王者選手 dict8 = dict(zip(list8_1, list8_2)) dict8_2 = dict(zip(list8_1, zip(list8_2, list8_3))) print("王者選手:", dict8) print("王者選手:", dict8_2)
青銅選手:用列表創(chuàng)建字典,再利用for循環(huán)的方式,在字典中創(chuàng)建鍵值對(duì)的item。這次我會(huì)!
王者選手:利用zip內(nèi)置函數(shù),創(chuàng)建一個(gè)zip對(duì)象,并利用dict函數(shù)將zip對(duì)象轉(zhuǎn)化為字典,一行代碼搞定。完勝!
9.篩選出以元音字母開頭的字符串
# 9.篩選出以元音字母開頭的字符串 list9 = ["low", "irving", "james", "durant", "allen"] #青銅選手 new_list9 = [] for name in list9: if name[0].lower() in "aeiou": new_list9.append(name) print("青銅選手:", new_list9) print("王者選手:", list(filter(lambda x: x.lower().startswith(('a', 'e', 'i', 'o', 'u')), list9))) print("王者選手:", [name for name in list9 if name[0] in 'aeiouAEIOU'])
青銅選手:對(duì)于list9中的每個(gè)字符串元素進(jìn)行判斷處理,如果字符串的第一個(gè)字母是原因字母,則將該字符串添加到新的列表new_list9中。
王者選手:直接利用列表解析或者是通過filter函數(shù)來過濾list9中滿足匿名函數(shù)的元素,相比于map函數(shù),filter函數(shù)能夠直接過濾出來滿足條件的元素值。這不是更簡(jiǎn)單嘛~~
10.創(chuàng)建一個(gè)計(jì)數(shù)字典的方法
# 10.創(chuàng)建一個(gè)計(jì)數(shù)字典 from collections import Counter list10 = ["low", "irving", "james", "durant", "allen", "irving", "james", "allen", "durant", "durant"] #青銅選手 dict10 = {name:0 for name in set(list10)} for name in list10: if name in dict10: dict10[name] += 1 else: dict10[name] = 1 print("青銅選手:", dict10) # 王者選手 print("王者選手:", dict(Counter(list10)))
青銅選手:首先創(chuàng)建一個(gè)字典,字典的鍵包含了list10中所有出現(xiàn)過的元素,然后逐一統(tǒng)計(jì)列表中元素出現(xiàn)的次數(shù)。這不就行了?
王者選手:借用collections庫中的Counter類,直接統(tǒng)計(jì)list10中元素的個(gè)數(shù),然后利用dict函數(shù)來講Counter對(duì)象轉(zhuǎn)化為字典對(duì)象。
如果本篇博客有任何錯(cuò)誤,請(qǐng)批評(píng)指教,不勝感激 !
以上就是python進(jìn)階從青銅到王者一定會(huì)用上的Python技巧的詳細(xì)內(nèi)容,更多關(guān)于Python進(jìn)階技巧的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
jupyter notebook 恢復(fù)誤刪單元格或者歷史代碼的實(shí)現(xiàn)
這篇文章主要介紹了jupyter notebook 恢復(fù)誤刪單元格或者歷史代碼的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python3導(dǎo)入CSV文件的實(shí)例(跟Python2有些許的不同)
今天小編就為大家分享一篇Python3導(dǎo)入CSV文件的實(shí)例(跟Python2有些許的不同),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06對(duì)django2.0 關(guān)聯(lián)表的必填on_delete參數(shù)的含義解析
今天小編就為大家分享一篇對(duì)django2.0 關(guān)聯(lián)表的必填on_delete參數(shù)的含義解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08詳解如何使用Python的Plotly庫進(jìn)行交互式圖形可視化
Python中有許多強(qiáng)大的工具和庫可用于創(chuàng)建交互式圖形,其中之一就是Plotly庫,Plotly庫提供了豐富的功能和靈活的接口,使得創(chuàng)建各種類型的交互式圖形變得簡(jiǎn)單而直觀,本文將介紹如何使用Plotly庫來創(chuàng)建交互式圖形,需要的朋友可以參考下2024-05-05Python?web實(shí)戰(zhàn)教程之Django文件上傳和處理詳解
Django和Flask都是Python的Web框架,用于開發(fā)Web應(yīng)用程序,這篇文章主要給大家介紹了關(guān)于Python?web實(shí)戰(zhàn)教程之Django文件上傳和處理的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12Python函數(shù)的默認(rèn)參數(shù)設(shè)計(jì)示例詳解
這篇文章主要給大家介紹了關(guān)于Python函數(shù)的默認(rèn)參數(shù)設(shè)計(jì)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12