成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python奇遇記:數(shù)據(jù)結(jié)構(gòu)窺探2

Ocean / 1787人閱讀

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

上次我們講了幾個不常見的數(shù)據(jù)類型,每個都有自己特殊的用途,雖然不經(jīng)常用到,了解一下也好。比如我們提到的數(shù)組類型,如果在數(shù)據(jù)量很大的時候同時要效率,就可以使用它。這次來說說python中常見的數(shù)據(jù)類型像列表、元組、字典、集合中的一些很有用的技巧,幫助你提高開發(fā)效率。

來看看。

列表有一個很有用的技巧是使用列表推導(dǎo)式,這個大家可能都知道,如果你需要迭代列表中的數(shù)據(jù),使用循環(huán)是個很麻煩的事,使用列表推導(dǎo)式一行就搞定。

datas = [3, 4, 2, 8, 12, 5, 7]
# 找出列表中小于10的數(shù)據(jù)
print([data for data in datas if data<10])
[3, 4, 2, 8, 5, 7]

除了列表推導(dǎo)式,還有字典推導(dǎo)式,集合推導(dǎo)式,用法都一樣。還有一個特殊的生成器表達式,生成器表達式并不會在剛開始就生成一個數(shù)據(jù)類型,而是在迭代時才生成,這樣可以節(jié)省內(nèi)存。如果你的數(shù)據(jù)量很大的話,考慮使用生成器表達式。生成器表達式使用小括號。

# 使用上面的數(shù)據(jù)
# 生成器表達式使用小括號
r = (data for data in datas if data<10)
# 你看,打印r時并不會輸出結(jié)果
print(r)
# 現(xiàn)在就可以了
# 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進行了一次迭代,如果再次輸出就是空的。

關(guān)于什么是生成器我們下次再講。

如果我們需要找出列表中的某個數(shù)據(jù)?或者是某一部分的數(shù)據(jù)?

使用切片。切片不僅對列表有用,同樣適用于元組和字符串。切片中以冒號間隔,前兩個參數(shù)為起始點,第三個為步長,也就是每隔幾個找一個出來。

a = [2, 3, "a", 6, 4]
print(a[3:4])

b = "hahahah"
# 步長為2
print(b[::2])
# 如果步長設(shè)為1,就是從后往前取值
# 對b取反
print(b[::-1])

c = (2, 2, 3, 4, 5)
print(c[:3])
[6]
hhhh
hahahah
(2, 2, 3)

每次都用數(shù)字表示切片的起始點看起來很麻煩對不對,還要記住從哪開始從哪結(jié)束。如果你需要對很多不同的數(shù)據(jù)都執(zhí)行同樣的切片操作,最好是為切片命名,這樣只需定義一次就行了。切片命名使用slice方法,內(nèi)部參數(shù)與切片一樣。

items = [1, 2, 3, 4, 5, 6, 7]
# slice用來對切片命名,比如規(guī)定這個切片是從2到4,2個步長,然后就可以使用了
a = slice(2, 4)
print(a)
print(items[a])

# 其它的數(shù)據(jù)也能用
itemss = [1, 2, 4, 6, 5, 6, 7]
print(itemss[a])
slice(2, 4, None)
[3, 4]
[4, 6]

還有一個技巧叫做拆包,就是把一個列表或者字符同時賦值給多個變量,任何可迭代對象(也就是能夠用for循環(huán))都可以使用拆包。比如有一個函數(shù)返回了多個數(shù)據(jù),我們在調(diào)用時就可以直接賦值給多個變量,而不用再定義一個數(shù)據(jù)類型,然后再賦值。多麻煩啊。

a, b, c = [1, 2, 4]
print(a)
a, b = "it"
print(a)
1
i

有一個問題,如果我的數(shù)據(jù)很多,難道要一個一個賦值給變量。多麻煩啊。對剩余的的數(shù)據(jù),使用星號代替即可。如果數(shù)據(jù)不是你需要的,使用_代替,使用其它的字符也是可以的,這只是一個約定而已。

# 可以這樣
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]

最后一個技巧。

如果我們需要統(tǒng)計一個序列(字符串、列表、元組)中某個元素出現(xiàn)的次數(shù),怎么實現(xiàn)?循環(huán)這個序列,利用元素的下標,如果某個元素出現(xiàn)則加1,想想都麻煩。使用collections.Counter。counter中有個most_common方法,接受需要統(tǒng)計的元素個數(shù)作為參數(shù)。例子如下:

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)
# 出現(xiàn)頻率最高的3個單詞
top_three = word_counts.most_common(3)
print(top_three)
[("eyes", 8), ("the", 5), ("look", 4)]

限于篇幅,還有許多awesome的技巧沒有涉及,下篇文章我們再講。希望上面說的一些東西對你有幫助。


本人才疏學(xué)淺,上文中難免有些錯誤,還請各位品評指正。如果覺得寫的還行,歡迎關(guān)注我的公眾號MLGroup,帶你走進機器學(xué)習(xí)的世界。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44537.html

相關(guān)文章

  • python奇遇數(shù)據(jù)結(jié)構(gòu)窺探3

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

    toddmark 評論0 收藏0
  • Python奇遇數(shù)據(jù)結(jié)構(gòu)窺探

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

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

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

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

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

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

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

    APICloud 評論0 收藏0

發(fā)表評論

0條評論

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