首頁 > 後端開發 > Python教學 > 必看的的30個Python語言的特點技巧(3)

必看的的30個Python語言的特點技巧(3)

高洛峰
發布: 2017-03-17 16:44:01
原創
1261 人瀏覽過

從我開始學習Python時我就決定要維護一個經常使用的「訣竅」清單。不論何時當我看到一段讓我覺得「酷,這樣也行!」的程式碼(在一個例子中、在StackOverflow、在開源軟體中,等等),我會嘗試它直到理解它,然後把它加到列表中。這篇文章是清理過清單的一部分。如果你是個有經驗的Python程式設計師,儘管你可能已經知道一些,但你仍能發現一些你不知道的。如果你是一個正在學習Python的C、C++或Java程式設計師,或是剛開始學習編程,那麼你會像我一樣發現它們中的許多非常有用。

每個訣竅或語言特性只能透過實例來驗證,無需過多解釋。雖然我已盡力使例子清晰,但它們中的一些仍會看起來有些複雜,這取決於你的熟悉程度。所以如果看過例子後還不清楚的話,標題能夠提供足夠的資訊讓你透過Google獲取詳細的內容。

清單依難度排序,常用的語言特徵和技巧放在前面。

1.30   最大最小元素(heapq.nlargest和heapq.nsmallest)

>>> a = [random.randint(0, 100) for  in xrange(100)]  

>>> heapq.nsmallest(5, a)  

#[3, 3, 5, 6, 8]  

>>> heapq.nlargest(5, a)  

[100, 100, 99, 98, 98] 

1.31笛卡兒乘積(itertools.product)

>>> for p in itertools.product([1, 2, 3], [4, 5]):  

#(1 , 4)  

(1, 5)  

(2, 4)  

(2, 5)  

#(3, 4)  

(3, 5)  

>>> for p in itertools.product([0, 1], repeat=4):  

...     # print ''.join(str(x) for x in p)  

...  

0000 

0001 

0010 

0011 

0100 

0101 

0110 

0111 

#1000 

#1001 

#1010 

1011 

1100 

1101 

1110 

1111 

#1.32   組合的組合和組合的組合和組合的組合和組合的組合。置換(itertools.combinations 和itertools.combinations_with_replacement)

>>> for c in itertools.combinations([1, 2, 3, 4, 5], 3): 1

o ...     print ''.join(str(x) for x in c)  

#...  

123 

##124 

#125 

134 

135 

145 

234 

235 

#245 

345 

#245 

345 

>>> for c in itertools.combinations_with_replacement([1, 2, 3], 2):  

...     print ''.join(str(x) for x in c )  

...  

11 

#12 

13 

22 

23 

33 

1.33   排序(itertools.permutations)

>>> for p in itertools.permutations([1, 2, 3, 4]):  

#...     print ''.join(str(x) for x in p)  

...  

1234 

1243 

#1324 

1342 

1423 

1432 

2134 

2143 

#2314 

#2341 

#2314 

#2341 

#2413 

#2431 

3124 

3142 

3214 

#3241 

#3412

3421 

4123 

4132 

4213 

4231 

4312 

4321 

1.34   連結的迭代(itertools.chain)######>>> a = [1, 2, 3, 4]  #######>>> for p in itertools .chain(itertools.combinations(a, 2), itertools.combinations(a, 3)):  ######...     print p  ######...  #######(1 , 2)  ######(1, 3)  ######(1, 4)  ######(2, 3)  #######(2, 4)  ### ###(3, 4)  ######(1, 2, 3)  ######(1, 2, 4)  ######(1, 3, 4)  ### ###(2, 3, 4)  ######>>> for subset in itertools.chain.from_iterable(itertools.combinations(a, n) for n in range(len(a) + 1 ))  ######...     print subset  #######...  ######()  #####(1,)  #######(2,) ######(3,)  ######(4,)  #######(1, 2)  ######(1, 3)  ######(1 , 4)  ######(2, 3)  ######(2, 4)  ######(3, 4)  #######(1, 2, 3)  # #####(1, 2, 4)  ######(1, 3, 4)  ######(2, 3, 4)  #######(1, 2, 3 , 4) ######1.35   依給定值分組行(itertools.groupby)######>>> from operator import itemgetter  ######>>> import itemgetter  ######>>> import itertools  ###

>>> with open('contactlenses.csv', 'r') as infile:

...     data = [line.strip().split(',') for line infile]

# #...

>>>資料 = 資料[1:]

>>> def print_data(rows):  

...     print '\n'.join('\t'.join('{:

...

>>> print_data(data)  

年輕              注意力                  no    沒有 

年輕              近視                 否        

年輕            近視                  是                       近視                  是                   正常

##年輕              遠視           沒有                        遠視           沒有                   正常                  是                    選擇               無                    正常                 硬 

pre -老花眼                 沒有                       減少               沒有  

前老花眼                   沒有                      正常                  軟 

老花前      近視                   是                     減少                 無  

老花前   近視                   是                     正常                  硬  

減少              無

                                            前老花眼           是                    減                              正常                 且沒有

老花眼                       沒有                       減少                 無  

老花眼                               沒有                      正常                  無  

老花眼          近視                   是                     減少                 無  

老花          近視                   是                     正常                  硬  

老花             遠視            否減少                無 

遠視         遠視             無 

老花眼          遠視           是             >> ;> data.sort(key=itemgetter(-1))  

>>>> for value, group in itertools.groupby(data, lambda r: r[-1]):

...     print '-----------'

# ...     print '組:' + 值

##...     print_data(group)  

...

-----------  

組:硬             近視                  是                       遠視 是                  正常                           正常                  

老花眼近視                    硬 

#-----------  

組:無 

年輕              近視                     無 

年輕近視              減少                 時使用中反

#12

1遠視           無                    減             是                    減少                「「反」中」(

老花前             否                     減中                   是                    選擇                 無               減少                 無

老花前   遠視眼睛                  無

前老花眼     遠視眼           是                    正常                 無 

老花眼           近視                  否                   減少                無 

老花眼         近視                無                   正常                 無 

老花眼         近視                  是                    減少                無 

老花眼         遠視眼           否                     時下眼睛           是                   減少                                正常                 無 

#----------- #組中:軟              近視                 否                        遠視沒有                    正常                               正常               軟

前老花眼遠目     否                     正常軟

以上是必看的的30個Python語言的特點技巧(3)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板