20个常用的Python小技巧
?
2019 年第 73 篇文章,總第 97 篇文章
原題?| 20 Python Snippets You Should Learn Today
作者?| Chaitanya Baweja
原文?| https://medium.com/better-programming/20-python-snippets-you-should-learn-today-8328e26ff124
譯者?| kbsc13("算法猿的成長"公眾號作者)
聲明?| 翻譯是出于交流學習的目的,歡迎轉載,但請保留本文出于,請勿用作商業或者非法用途
Python 是一門可讀性和簡潔性都非常好的編程語言,經常可以用簡單的一行代碼即實現其他語言需要多行代碼才可以實現的功能。今天會介紹 20 個非常有用的小技巧。
今日推薦文章
github標星8331+:吳恩達深度學習課程資源(完整筆記、中英文字幕視頻、python作業,提供百度云鏡像!)!)
1. 反轉字符串
采用切片操作實現字符串的反轉:
#?Reversing?a?string?using?slicingmy_string?=?"ABCDE" reversed_string?=?my_string[::-1]print(reversed_string)#?Output #?EDCBA2. 實現首字母大寫
這個小技巧是讓字符串中每個單詞的首字母變為大寫,通過方法?title()?實現:
my_string?=?"my?name?is?chaitanya?baweja"#?using?the?title()?function?of?string?class new_string?=?my_string.title()print(new_string)#?Output #?My?Name?Is?Chaitanya?Baweja3. 查找字符串中唯一元素
這個技巧是查找字符串中不重復的元素有哪些,通過集合?set?來實現:
my_string?=?"aavvccccddddeee"#?converting?the?string?to?a?set temp_set?=?set(my_string)#?stitching?set?into?a?string?using?join new_string?=?''.join(temp_set)print(new_string)4. 打印 n 次字符串或者列表
這個技巧通過乘法即可實現打印多次的操作:
n?=?3?#?number?of?repetitionsmy_string?=?"abcd" my_list?=?[1,2,3]print(my_string*n) #?abcdabcdabcdprint(my_string*n) #?[1,2,3,1,2,3,1,2,3]這個技巧比較有趣的應用是定義一個包含 n 個重復的常數元素的列表,如下所示:
n?=?4 my_list?=?[0]*n? #?[0,?0,?0,?0]5. 列表推導式
列表推導式是一種非常優雅的基于其他列表來創建新列表的方法,示例如下所示:
original_list?=?[1,2,3,4]new_list?=?[2*x?for?x?in?original_list]print(new_list) #?[2,4,6,8]6. 交換兩個變量
Python 中交換兩個變量的數值是非常簡單的,完全不需要第三個變量作為中間值。示例如下所示:
a?=?1 b?=?2a,?b?=?b,?aprint(a)?#?2 print(b)?#?17. 字符串分割為一串子字符串列表
采用?split()?方法可以將字符串分割為一個包含其子字符串的列表,示例如下所示:
string_1?=?"My?name?is?Chaitanya?Baweja" string_2?=?"sample/?string?2"#?默認分割符?'?' print(string_1.split()) #?['My',?'name',?'is',?'Chaitanya',?'Baweja']#?自定義分割符?'/' print(string_2.split('/')) #?['sample',?'?string?2']8. 合并多個字符串為一個字符串
采用?join()?方法可以將多個字符串合并為一個字符串。這相當于上一條技巧的反向操作。示例如下所示:
list_of_strings?=?['My',?'name',?'is',?'Chaitanya',?'Baweja']#?Using?join?with?the?comma?separator print(','.join(list_of_strings))#?Output #?My,name,is,Chaitanya,Baweja9. 判斷字符串是否回文
通過反轉字符串,再和原字符串比較,可以判斷是否為回文,示例如下:
my_string?=?"abcba"if?my_string?==?my_string[::-1]:print("palindrome") else:print("not?palindrome")#?Output #?palindrome10. 統計列表元素的個數
有多種方式可以實現這個技巧,但我最喜歡的是采用?Counter?類。
Counter?可以統計給定列表中每個元素的個數,返回一個字典格式。示例如下,其中most_common()方法可以返回列表中數量最多的元素
#?finding?frequency?of?each?element?in?a?list from?collections?import?Countermy_list?=?['a','a','b','b','b','c','d','d','d','d','d'] count?=?Counter(my_list)?#?defining?a?counter?objectprint(count)?#?Of?all?elements #?Counter({'d':?5,?'b':?3,?'a':?2,?'c':?1})print(count['b'])?#?of?individual?element #?3print(count.most_common(1))?#?most?frequent?element #?[('d',?5)]11. 判斷兩個字符串是否是字謎(Anagrams)
字謎(Anagrams)是指將一個單詞打亂其字母順序,重新排列為一個新的單詞。
Counter正好可以用于解決這個問題,因為如果兩個字符串的?Counter?對象相等,就表示它們就是字謎,因為包含相同元素且元素數量都相同。
示例如下:
from?collections?import?Counterstr_1,?str_2,?str_3?=?"acbde",?"abced",?"abcda" cnt_1,?cnt_2,?cnt_3??=?Counter(str_1),?Counter(str_2),?Counter(str_3)if?cnt_1?==?cnt_2:print('1?and?2?anagram') if?cnt_1?==?cnt_3:print('1?and?3?anagram')12. 采用 try-except-else 語句
Python 中處理錯誤異常可以簡單采用?try-except?語句,而再添加一個?else?語句會更加有幫助,它是在沒有發生異常時,執行完?try?語句后運行的語句。
此外,如果需要運行是否發現異常的都需要執行的代碼,可以采用?finally?,示例如下:
a,?b?=?1,0try:print(a/b)#?exception?raised?when?b?is?0 except?ZeroDivisionError:print("division?by?zero") else:print("no?exceptions?raised") finally:print("Run?this?always")13. 采用 Enumerate 來獲取索引值
在迭代列表的時候,可以采用?enumerate?來得到索引值,示例如下:
my_list?=?['a',?'b',?'c',?'d',?'e']for?index,?value?in?enumerate(my_list):print('{0}:?{1}'.format(index,?value))#?0:?a #?1:?b #?2:?c #?3:?d #?4:?e注意,這里還可以指定索引開始的范圍,只需要在調用?enumerate()?時候,添加一個參數,如下所示:
my_list?=?['a',?'b',?'c',?'d',?'e']for?index,?value?in?enumerate(my_list,?1):print('{0}:?{1}'.format(index,?value))14. 檢查一個對象的內存使用量
可以采用?sys.getsizeof()?檢查,示例如下:
import?sysnum?=?21print(sys.getsizeof(num))#?In?Python?2,?24 #?In?Python?3,?28更詳細內容可以查看 https://code.tutsplus.com/tutorials/understand-how-much-memory-your-python-objects-use--cms-25609
15. 合并兩個字典
在 Python2 版本的時候可以采用?update()?方法實現合并字典的操作,但在 Python3.5 后的版本,可以采用新的方式實現,操作更加簡單,如下所示:
dict_1?=?{'apple':?9,?'banana':?6} dict_2?=?{'banana':?4,?'orange':?8}combined_dict?=?{**dict_1,?**dict_2}print(combined_dict) #?Output #?{'apple':?9,?'banana':?4,?'orange':?8}16. 計算代碼執行時間
采用?time?模塊來計算一段代碼的執行時間,例子如下:
import?timestart_time?=?time.time() #?Code?to?check?follows a,?b?=?1,2 c?=?a+?b #?Code?to?check?ends end_time?=?time.time() time_taken_in_micro?=?(end_time-?start_time)*(10**6)print("?Time?taken?in?micro_seconds:?{0}?ms").format(time_taken_in_micro)17. 展平元素為列表的列表
有時候并確定一個列表中的深度有多深,所以你只想簡單的將所有元素都放在一個列表中,實現技巧代碼如下所示:
from?iteration_utilities?import?deepflatten#?列表只有一層深度的情況,采用這個函數 def?flatten(l):return?[item?for?sublist?in?l?for?item?in?sublist]l?=?[[1,2,3],[3]] print(flatten(l)) #?[1,?2,?3,?3]#?不知道列表的深度的情況 l?=?[[1,2,3],[4,[5],[6,7]],[8,[9,[10]]]]print(list(deepflatten(l,?depth=3))) #?[1,?2,?3,?4,?5,?6,?7,?8,?9,?10]如果是數組的話,可以采用 Numpy 方式,參考文章 https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.flatten.htmlhttps://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.flatten.html
18. 從列表中采樣
采用?random?模塊可以對一個列表隨機采樣?n?個元素,示例如下所示:
import?randommy_list?=?['a',?'b',?'c',?'d',?'e'] num_samples?=?2samples?=?random.sample(my_list,num_samples) print(samples) #?[?'a',?'e']?this?will?have?any?2?random?values另外,在 Python 3 中推薦采用?secrets?模塊,基于密碼學的目的來隨機生成樣本,示例如下:
import?secrets??????????????????????????????#?imports?secure?module. secure_random?=?secrets.SystemRandom()??????#?creates?a?secure?random?object.my_list?=?['a','b','c','d','e'] num_samples?=?2samples?=?secure_random.sample(my_list,?num_samples)print(samples) #?[?'e',?'d']?this?will?have?any?2?random?values19. 數字化
下面是一個例子,將一個數字轉換為一個數字列表的形式:
num?=?123456list_of_digits?=?list(map(int,?str(num)))print(list_of_digits) #?[1,?2,?3,?4,?5,?6]20. 檢查唯一性
下面的代碼是用于判斷一個列表的所有元素是否都是唯一沒有重復的:
def?unique(l):if?len(l)==len(set(l)):print("All?elements?are?unique")else:print("List?has?duplicates")unique([1,2,3,4]) #?All?elements?are?uniqueunique([1,1,2,3]) #?List?has?duplicates小結
以上介紹的都是比較常用的小技巧,代碼函數不多,非常簡潔易懂。
這里也推薦一個網站--30secondsofcode,可以更好搜索這些常用的技巧:
https://python.30secondsofcode.org/
歡迎關注我的微信公眾號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學習和進步!
?
ps:以后每次接廣告后,第二天或者當天的次條都會有一個抽獎活動,金額不定,這需要視能得到多少廣告費了,所以希望大家可以多多支持,多多點擊閱讀,覺得不錯的幫忙點下在看或者轉發分享,謝謝!
總結
以上是生活随笔為你收集整理的20个常用的Python小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几款富文本编辑器的比较
- 下一篇: 深受程序员鄙视的外行语录,你都听过吗?