上次咱們講了幾個不常見的數據類型,每一個都有本身特殊的用途,雖然不常常用到,瞭解一下也好。好比咱們提到的數組類型,若是在數據量很大的時候同時要效率,就可使用它。此次來講說python中常見的數據類型像列表、元組、字典、集合中的一些頗有用的技巧,幫助你提升開發效率。python
來看看。數組
列表有一個頗有用的技巧是使用列表推導式,這個你們可能都知道,若是你須要迭代列表中的數據,使用循環是個很麻煩的事,使用列表推導式一行就搞定。機器學習
datas = [3, 4, 2, 8, 12, 5, 7] # 找出列表中小於10的數據 print([data for data in datas if data<10])
[3, 4, 2, 8, 5, 7]
除了列表推導式,還有字典推導式,集合推導式,用法都同樣。還有一個特殊的生成器表達式,生成器表達式並不會在剛開始就生成一個數據類型,而是在迭代時才生成,這樣能夠節省內存。若是你的數據量很大的話,考慮使用生成器表達式。生成器表達式使用小括號。函數
# 使用上面的數據 # 生成器表達式使用小括號 r = (data for data in datas if data<10) # 你看,打印r時並不會輸出結果 print(r) # 如今就能夠了 # enumerate同時返回下標和元素 for i, j in enumerate(r): print(i, j)
<generator object <genexpr> at 0x7f7c93644db0> 0 3 1 4 2 2 3 8 4 5 5 7
須要注意的事,生成器表達式一次只能用一次迭達,上面咱們對r進行了一次迭代,若是再次輸出就是空的。學習
關於什麼是生成器咱們下次再講。spa
若是咱們須要找出列表中的某個數據?或者是某一部分的數據?code
使用切片。切片不只對列表有用,一樣適用於元組和字符串。切片中以冒號間隔,前兩個參數爲起始點,第三個爲步長,也就是每隔幾個找一個出來。對象
a = [2, 3, 'a', 6, 4] print(a[3:4]) b = 'hahahah' # 步長爲2 print(b[::2]) # 若是步長設爲1,就是從後往前取值 # 對b取反 print(b[::-1]) c = (2, 2, 3, 4, 5) print(c[:3])
[6] hhhh hahahah (2, 2, 3)
每次都用數字表示切片的起始點看起來很麻煩對不對,還要記住從哪開始從哪結束。若是你須要對不少不一樣的數據都執行一樣的切片操做,最好是爲切片命名,這樣只需定義一次就好了。切片命名使用slice方法,內部參數與切片同樣。three
items = [1, 2, 3, 4, 5, 6, 7] # slice用來對切片命名,好比規定這個切片是從2到4,2個步長,而後就可使用了 a = slice(2, 4) print(a) print(items[a]) # 其它的數據也能用 itemss = [1, 2, 4, 6, 5, 6, 7] print(itemss[a])
slice(2, 4, None) [3, 4] [4, 6]
還有一個技巧叫作拆包,就是把一個列表或者字符同時賦值給多個變量,任何可迭代對象(也就是可以用for循環)均可以使用拆包。好比有一個函數返回了多個數據,咱們在調用時就能夠直接賦值給多個變量,而不用再定義一個數據類型,而後再賦值。多麻煩啊。圖片
a, b, c = [1, 2, 4] print(a) a, b = 'it' print(a)
1 i
有一個問題,若是個人數據不少,難道要一個一個賦值給變量。多麻煩啊。對剩餘的的數據,使用星號代替便可。若是數據不是你須要的,使用_代替,使用其它的字符也是能夠的,這只是一個約定而已。
# 能夠這樣 data = [1, 2, 3, 4, 5, 6] a, b, *r = data print(r) # 也能夠這樣 *a, b, c, d = data print(a)
[3, 4, 5, 6] [1, 2, 3]
最後一個技巧。
若是咱們須要統計一個序列(字符串、列表、元組)中某個元素出現的次數,怎麼實現?循環這個序列,利用元素的下標,若是某個元素出現則加1,想一想都麻煩。使用collections.Counter。counter中有個most_common方法,接受須要統計的元素個數做爲參數。例子以下:
words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the', 'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into', 'my', 'eyes', "you're", 'under' ] from collections import Counter word_counts = Counter(words) # 出現頻率最高的3個單詞 top_three = word_counts.most_common(3) print(top_three)
[('eyes', 8), ('the', 5), ('look', 4)]
限於篇幅,還有許多awesome的技巧沒有涉及,下篇文章咱們再講。但願上面說的一些東西對你有幫助。
本人才疏學淺,上文中不免有些錯誤,還請各位品評指正。若是以爲寫的還行,歡迎關注個人公衆號MLGroup,帶你走進機器學習的世界。