Python看起來(lái)似乎是一種任何人都可以學(xué)習(xí)的簡(jiǎn)單語(yǔ)言,但實(shí)際上,學(xué)會(huì)不等于精通,Python的“后勁兒”超乎我們的想象,它容易入門卻很難掌握。在Python中,一個(gè)通常有多種處理方法,但很容易出錯(cuò)的地方很多;或者僅僅因?yàn)椴恢滥K的存在,你就得重新創(chuàng)建標(biāo)準(zhǔn)庫(kù),這很浪費(fèi)時(shí)間。
Python標(biāo)準(zhǔn)庫(kù)是一個(gè)巨大的野獸,它的生態(tài)系統(tǒng)絕對(duì)是龐大的。雖然Python模塊可能有200萬(wàn)千兆字節(jié),好在有一些使用技巧存在,我們可以用Python中與科學(xué)計(jì)算相關(guān)的標(biāo)準(zhǔn)庫(kù)和包來(lái)學(xué)習(xí)。
1.反轉(zhuǎn)字符串
雖然看似是很基礎(chǔ)的操作,但是用char循環(huán)來(lái)反轉(zhuǎn)字符串可能會(huì)非常繁瑣麻煩。幸運(yùn)的是,Python包含了一個(gè)簡(jiǎn)單的內(nèi)置操作來(lái)準(zhǔn)確地執(zhí)行這個(gè)任務(wù),我們只需訪問(wèn)字符串上的索引::-1。
a = “!dlrow olleH”
backward = a[::-1]
2.Dims作為變量
在大多數(shù)語(yǔ)言中,為了將數(shù)組放入一組變量中需迭代循環(huán)值,或按位置訪問(wèn)暗點(diǎn),如下所示:
firstdim = array[1]
然而,在Python中有一種更好更快的方法。為了將一列值改為變量,可以簡(jiǎn)單地將變量名設(shè)置為與數(shù)組長(zhǎng)度相同的數(shù)組:
array = [5, 10, 15, 20]
five, ten, fift, twent = array
3.生成器的next()迭代
在編程中的大多數(shù)正常情況下,可以訪問(wèn)一個(gè)索引,并使用計(jì)數(shù)器獲取位置數(shù)字,計(jì)數(shù)器將只是一個(gè)值,添加到:
array1 = [5, 10, 15, 20]
array2 = (x ** 2 for x in range(10))
counter = 0for i in array1:# This code wouldn‘t work because ’i‘ is not in array2.
# i = array2[i]
i = array2[counter]
# ^^^ This code would because we areaccessing the position of i
我們也可以用next()代替它。Next使用一個(gè)迭代器,該迭代器將當(dāng)前位置存儲(chǔ)在內(nèi)存中,并在后臺(tái)迭代列表:
g = (x ** 2 for x in range(10))
print(next(g))
print(next(g))
4.智能拆包
迭代地解壓值可能會(huì)非常耗費(fèi)時(shí)力,Python中有幾種不錯(cuò)的方法可以用來(lái)解壓列表的方法。其中一個(gè)是*,它將填充未分配的值并將它們添加到變量名下的新列表中。
a, *b, c = [1, 2, 3, 4, 5]
5.列舉
不了解列舉那可不太行。列舉可以獲取列表中某些值的索引,在數(shù)據(jù)科學(xué)中使用數(shù)組而不是數(shù)據(jù)幀時(shí),這就特別有用:
for i,w in enumerate(array):
print(i,w)
6.命名切片
Python中,分割列表非常簡(jiǎn)單,各式各樣優(yōu)秀工具都能做到。特別好的一點(diǎn)是,它還能夠給列表命名,這對(duì)于Python中的線性代數(shù)特別有用:
a = [0, 1, 2, 3, 4, 5]
LASTTHREE = slice(-3, None)
slice(-3, None, None)
print(a[LASTTHREE])
7.Itertools
如果深入學(xué)習(xí)Python,那你肯定要熟悉itertools。itertools是標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,它可以不斷地解決迭代問(wèn)題。它不僅使編寫復(fù)雜循環(huán)大幅度變?nèi)菀祝疫€使代碼更簡(jiǎn)潔快速。有數(shù)百種Itertools的使用示例,來(lái)看看其中一個(gè):
c = [[1, 2], [3, 4], [5, 6]]
# Let’s convert this matrix to a 1 dimensional list.
import itertools as it
newlist = list(it.chain.from_iterable(c))
8.分組相鄰列表
在for循環(huán)中,對(duì)相鄰循環(huán)進(jìn)行分組當(dāng)然很容易,特別是使用zip(),但這肯定不是最好的方法。為了更輕松便捷地實(shí)現(xiàn)這一點(diǎn),可以用zip編寫一個(gè)lambda表達(dá)式,該表達(dá)式將對(duì)相鄰列表進(jìn)行分組,如下所示:
a = [1, 2, 3, 4, 5, 6]
group_adjacent = lambda a, k: zip(*([iter(a)] * k))
group_adjacent(a, 3) [(1, 2, 3), (4, 5, 6)]
group_adjacent(a, 2) [(1, 2), (3, 4), (5, 6)]
group_adjacent(a, 1)
9.計(jì)數(shù)器
集合也是模塊中很好的標(biāo)準(zhǔn)庫(kù),這里向大家介紹的是集合中的計(jì)數(shù)器。使用計(jì)數(shù)器,可以輕松獲得一個(gè)列表的計(jì)數(shù)。這對(duì)于獲取數(shù)據(jù)中的值總數(shù)、數(shù)據(jù)的空計(jì)數(shù),以及查看數(shù)據(jù)的唯一值非常有用。
“為什么不直接使用Pandas呢?”使用Pandas來(lái)實(shí)現(xiàn)這一點(diǎn)無(wú)疑會(huì)困難得多,而且這只是在部署算法時(shí)需要添加到虛擬環(huán)境中的另一個(gè)依賴項(xiàng)。另外,Python中的計(jì)數(shù)器類型有很多Pandas系列沒(méi)有的特性,這使其在某些情況下更有用。
A = collections.Counter([1, 1, 2,2, 3, 3, 3, 3, 4, 5, 6, 7])
A Counter({3: 4, 1: 2, 2: 2, 4: 1, 5: 1, 6: 1, 7: 1})
A.most_common(1) [(3, 4)]
A.most_common(3) [(3, 4), (1, 2), (2, 2)]
10.出隊(duì)
如下所示,出隊(duì)能讓代碼非常整潔:
import collections
Q = collections.deque()
Q.append(1)
Q.appendleft(2)
Q.extend([3, 4])
Q.extendleft([5, 6])
Q.pop()
Q.popleft()
Q.rotate(3)
Q.rotate(-3)
print(Q)
這些是筆者一直愛(ài)用的Python技巧,都非常通用和實(shí)用,實(shí)踐中總有機(jī)會(huì)能用到。Python的標(biāo)準(zhǔn)庫(kù)函數(shù)工具箱變得越來(lái)越多樣,還有很多筆者也沒(méi)聽(tīng)說(shuō)過(guò)的工具。學(xué)無(wú)止境,這多么令人興奮!
-
字符串
+關(guān)注
關(guān)注
1文章
589瀏覽量
21126 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86225 -
標(biāo)準(zhǔn)庫(kù)
+關(guān)注
關(guān)注
0文章
31瀏覽量
7674
發(fā)布評(píng)論請(qǐng)先 登錄
【OK210申請(qǐng)】嵌入式進(jìn)一步學(xué)習(xí)(想試著做個(gè)簡(jiǎn)單的平板玩玩)
E4406A達(dá)到adc對(duì)齊時(shí)不會(huì)更進(jìn)一步了
如何讓計(jì)算機(jī)視覺(jué)更進(jìn)一步接近人類視覺(jué)?
進(jìn)一步提高UPS電源的可靠性
天齊鋰業(yè)年產(chǎn)2萬(wàn)噸碳酸鋰工廠項(xiàng)目的實(shí)施 離2020年實(shí)現(xiàn)10萬(wàn)噸目標(biāo)更進(jìn)一步
如何從工業(yè)4.0更進(jìn)一步轉(zhuǎn)向工業(yè)5.0?
提速降費(fèi)政策更進(jìn)一步 取消流量“漫游”費(fèi)為5G鋪路
Oculus Quest VR頭盔獲得FCC認(rèn)證 意味著距離上市更進(jìn)一步
縮短交互路徑 智能家居產(chǎn)品或者全屋智能的體驗(yàn)將更進(jìn)一步
智能家居交互方向或是無(wú)感化 全屋智能的體驗(yàn)將更進(jìn)一步
華為推出新功能,鴻蒙系統(tǒng)將更進(jìn)一步
Type-C接口需求的增加,使得USB PD實(shí)現(xiàn)進(jìn)一步擴(kuò)增
更進(jìn)一步學(xué)習(xí)MySQL

【轉(zhuǎn)載】更進(jìn)一步的了解Keil Flash的下載算法

榮耀Magic4系列3月17日發(fā)布會(huì),隱私保護(hù)更進(jìn)一步

評(píng)論