摘要:找出列表中小于的數據除了列表推導式,還有字典推導式,集合推導式,用法都一樣。如果你的數據量很大的話,考慮使用生成器表達式。切片不僅對列表有用,同樣適用于元組和字符串。切片命名使用方法,內部參數與切片一樣。對剩余的的數據,使用星號代替即可。
上次我們講了幾個不常見的數據類型,每個都有自己特殊的用途,雖然不經常用到,了解一下也好。比如我們提到的數組類型,如果在數據量很大的時候同時要效率,就可以使用它。這次來說說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)
at 0x7f7c93644db0> 0 3 1 4 2 2 3 8 4 5 5 7
需要注意的事,生成器表達式一次只能用一次迭達,上面我們對r進行了一次迭代,如果再次輸出就是空的。
關于什么是生成器我們下次再講。
如果我們需要找出列表中的某個數據?或者是某一部分的數據?
使用切片。切片不僅對列表有用,同樣適用于元組和字符串。切片中以冒號間隔,前兩個參數為起始點,第三個為步長,也就是每隔幾個找一個出來。
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方法,內部參數與切片一樣。
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,帶你走進機器學習的世界。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44537.html
摘要:字典和集合都是基于散列表實現的,散列表也就是表,了解過數據結構的應該知道。而使用另一種辦法,任何鍵在找不到的情況下都會用中的值數據類型比如替換。在設計時就可以使用創建你的數據接口。 這次主要說說字典和集合這兩種數據類型。 字典和集合都是基于散列表實現的,散列表也就是hash表,了解過數據結構的應該知道。與散列表相關的一個概念叫做可散列,什么是可散列?在python官方定義中是這樣說的:...
摘要:擠掉了堆中實現了堆排序。你可以用堆排序來查找一個序列中最大的或者最小的幾個元素。除了使用堆排序,中還有排序和,這兩個排序最終生成以列表表示的排序結果,堆排序也是。 這次我們來說說python中的數據結構。當然了,不會講很基礎的內容。 用過python的都知道,python有著與其他語言很不一樣的數據類型,像什么列表、元組、集合、字典之類。這些數據類型造就了python簡單易用同時又很強...
摘要:在中,特殊方法以雙下劃線開始,以雙下劃線結束。真假值,如果向量模為,返回實現向量加法實現向量乘法,例如返回向量的模返回歐幾里德范數找個例子運行下。怎么辦中有個特殊方法,可以修改控制臺輸出的樣式。 什么是特殊方法?當我們在設計一個類的時候,python中有一個用于初始化的方法$__init__$,類似于java中的構造器,這個就是特殊方法,也叫作魔術方法。簡單來說,特殊方法可以給你設計的...
摘要:來說說迭代器和生成器,還有可迭代對象和生成器表達式。有點繞是不是,其實,一般只要知道可迭代對象以及它是如何實現的就行了,中常常用生成器來代替迭代器,可以說,生成器就是迭代器。 來說說迭代器和生成器,還有可迭代對象和生成器表達式。 之前簡單的提到過,一個對象是可迭代的可以理解為能夠使用for循環。這樣說其實不太準確,某個對象可迭代是因為它內部實現了$__iter__$這個特殊方法。比如在...
摘要:先不講數據結構了,這次來說說中一些不被注意的功能。直接交換第二個功能。對的長度使用生成一個序列,然后遍歷或者這樣第三個功能。其實還接受第二個參數,它的作用是在迭代的過程中如果碰到第二個參數則停止。 先不講數據結構了,這次來說說python中一些不被注意的功能。 在python的設計哲學中,有這么一條內容:Simple is better than complex,簡單的代碼比復雜的要好...
閱讀 2447·2021-10-14 09:42
閱讀 1137·2021-09-22 15:09
閱讀 3545·2021-09-09 09:33
閱讀 3025·2021-09-07 09:59
閱讀 3638·2021-09-03 10:34
閱讀 3532·2021-07-26 22:01
閱讀 2822·2019-08-30 13:06
閱讀 1202·2019-08-30 10:48