国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python奇遇記:數據結構窺探2

Ocean / 1755人閱讀

摘要:找出列表中小于的數據除了列表推導式,還有字典推導式,集合推導式,用法都一樣。如果你的數據量很大的話,考慮使用生成器表達式。切片不僅對列表有用,同樣適用于元組和字符串。切片命名使用方法,內部參數與切片一樣。對剩余的的數據,使用星號代替即可。

上次我們講了幾個不常見的數據類型,每個都有自己特殊的用途,雖然不經常用到,了解一下也好。比如我們提到的數組類型,如果在數據量很大的時候同時要效率,就可以使用它。這次來說說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

相關文章

  • python奇遇數據結構窺探3

    摘要:字典和集合都是基于散列表實現的,散列表也就是表,了解過數據結構的應該知道。而使用另一種辦法,任何鍵在找不到的情況下都會用中的值數據類型比如替換。在設計時就可以使用創建你的數據接口。 這次主要說說字典和集合這兩種數據類型。 字典和集合都是基于散列表實現的,散列表也就是hash表,了解過數據結構的應該知道。與散列表相關的一個概念叫做可散列,什么是可散列?在python官方定義中是這樣說的:...

    toddmark 評論0 收藏0
  • Python奇遇數據結構窺探

    摘要:擠掉了堆中實現了堆排序。你可以用堆排序來查找一個序列中最大的或者最小的幾個元素。除了使用堆排序,中還有排序和,這兩個排序最終生成以列表表示的排序結果,堆排序也是。 這次我們來說說python中的數據結構。當然了,不會講很基礎的內容。 用過python的都知道,python有著與其他語言很不一樣的數據類型,像什么列表、元組、集合、字典之類。這些數據類型造就了python簡單易用同時又很強...

    mrli2016 評論0 收藏0
  • Python奇遇:特殊方法窺探

    摘要:在中,特殊方法以雙下劃線開始,以雙下劃線結束。真假值,如果向量模為,返回實現向量加法實現向量乘法,例如返回向量的模返回歐幾里德范數找個例子運行下。怎么辦中有個特殊方法,可以修改控制臺輸出的樣式。 什么是特殊方法?當我們在設計一個類的時候,python中有一個用于初始化的方法$__init__$,類似于java中的構造器,這個就是特殊方法,也叫作魔術方法。簡單來說,特殊方法可以給你設計的...

    niceforbear 評論0 收藏0
  • python奇遇:迭代器和生成器

    摘要:來說說迭代器和生成器,還有可迭代對象和生成器表達式。有點繞是不是,其實,一般只要知道可迭代對象以及它是如何實現的就行了,中常常用生成器來代替迭代器,可以說,生成器就是迭代器。 來說說迭代器和生成器,還有可迭代對象和生成器表達式。 之前簡單的提到過,一個對象是可迭代的可以理解為能夠使用for循環。這樣說其實不太準確,某個對象可迭代是因為它內部實現了$__iter__$這個特殊方法。比如在...

    atinosun 評論0 收藏0
  • python奇遇:隱藏的python功能

    摘要:先不講數據結構了,這次來說說中一些不被注意的功能。直接交換第二個功能。對的長度使用生成一個序列,然后遍歷或者這樣第三個功能。其實還接受第二個參數,它的作用是在迭代的過程中如果碰到第二個參數則停止。 先不講數據結構了,這次來說說python中一些不被注意的功能。 在python的設計哲學中,有這么一條內容:Simple is better than complex,簡單的代碼比復雜的要好...

    APICloud 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<