15段極簡Python程式碼:這些小技巧你都Get了嗎?
- 2020 年 2 月 10 日
- 筆記
Python 是機器學習最廣泛採用的程式語言,它最重要的優勢在於編程的易用性。如果讀者對基本的 Python 語法已經有一些了解,那麼這篇文章可能會給你一些啟發。作者簡單概覽了 30 段程式碼,它們都是平常非常實用的技巧,我們只要花幾分鐘就能從頭到尾瀏覽一遍。
✖
1. 重複元素判定
✖
以下方法可以檢查給定列表是不是存在重複元素,它會使用 set() 函數來移除所有重複元素。
def all_unique(lst): return len(lst) == len(set(lst)) x = [1,1,2,2,3,2,3,4,5,6] y = [1,2,3,4,5] all_unique(x) # False all_unique(y) # True
✖
2. 字元元素組成判定
✖
檢查兩個字元串的組成元素是不是一樣的。
from collections import Counter def anagram(first, second): return Counter(first) == Counter(second) anagram("abcd3", "3acdb") # True
✖
3. 記憶體佔用
✖
下面的程式碼塊可以檢查變數 variable 所佔用的記憶體。
import sys variable = 30 print(sys.getsizeof(variable)) # 24
✖
4. 位元組佔用
✖
下面的程式碼塊可以檢查字元串佔用的位元組數。
def byte_size(string): return(len(string.encode('utf-8'))) byte_size('') # 4 byte_size('Hello World') # 11
✖
5. 列印 N 次字元串
✖
該程式碼塊不需要循環語句就能列印 N 次字元串。
n = 2; s ="Programming"; print(s * n); # ProgrammingProgramming
✖
6. 大寫第一個字母
✖
以下程式碼塊會使用 title() 方法,從而大寫字元串中每一個單詞的首字母。
s = "programming is awesome" print(s.title()) # Programming Is Awesome
✖
7. 分塊
✖
給定具體的大小,定義一個函數以按照這個大小切割列表。
from math import ceil def chunk(lst, size): return list( map(lambda x: lst[x * size:x * size + size], list(range(0, ceil(len(lst) / size))))) chunk([1,2,3,4,5],2) # [[1,2],[3,4],5]
✖
8. 壓縮
✖
這個方法可以將布爾型的值去掉,例如(False,None,0,「」),它使用 filter() 函數。
def compact(lst): return list(filter(bool, lst)) compact([0, 1, False, 2, '', 3, 'a', 's', 34]) # [ 1, 2, 3, 'a', 's', 34 ]
✖
9. 解包
✖
如下程式碼段可以將打包好的成對列表解開成兩組不同的元組。
array = [['a', 'b'], ['c', 'd'], ['e', 'f']] transposed = zip(*array) print(transposed) # [('a', 'c', 'e'), ('b', 'd', 'f')]
✖
10. 鏈式對比
✖
我們可以在一行程式碼中使用不同的運算符對比多個不同的元素。
a = 3 print( 2 < a < 8) # True print(1 == a < 2) # False
✖
11. 逗號連接
✖
下面的程式碼可以將列表連接成單個字元串,且每一個元素間的分隔方式設置為了逗號。
hobbies = ["basketball", "football", "swimming"] print("My hobbies are: " + ", ".join(hobbies)) # My hobbies are: basketball, football, swimming
✖
12. 母音統計
✖
以下方法將統計字元串中的母音 (『a』, 『e』, 『i』, 『o』, 『u』) 的個數,它是通過正則表達式做的。
import re def count_vowels(str): return len(len(re.findall(r'[aeiou]', str, re.IGNORECASE))) count_vowels('foobar') # 3 count_vowels('gym') # 0
✖
13. 首字母小寫
✖
如下方法將令給定字元串的第一個字元統一為小寫。
def decapitalize(string): return str[:1].lower() + str[1:] decapitalize('FooBar') # 'fooBar' decapitalize('FooBar') # 'fooBar'
✖
14. 展開列表
✖
該方法將通過遞歸的方式將列表的嵌套展開為單個列表。
def spread(arg): ret = [] for i in arg: if isinstance(i, list): ret.extend(i) else: ret.append(i) return ret def deep_flatten(lst): result = [] result.extend( spread(list(map(lambda x: deep_flatten(x) if type(x) == list else x, lst)))) return result deep_flatten([1, [2], [[3], 4], 5]) # [1,2,3,4,5]
✖
15. 列表的差
✖
該方法將返回第一個列表的元素,其不在第二個列表內。如果同時要回饋第二個列表獨有的元素,還需要加一句 set_b.difference(set_a)。
def difference(a, b): set_a = set(a) set_b = set(b) comparison = set_a.difference(set_b) return list(comparison) difference([1,2,3], [1,2,4]) # [3]
End.
來源:簡書