從我開始學習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) ... ----------- 組:硬 近視 是 遠視 是 正常 正常 老花眼近視 硬 #----------- 組:無 年輕 近視 無 年輕近視 減少 時使用中反#121遠視 無 減 是 減少 「「反」中」(老花前 否 減中 是 選擇 無 減少 無
老花前 遠視眼睛 無
前老花眼 遠視眼 是 正常 無
老花眼 近視 否 減少 無
老花眼 近視 無 正常 無
老花眼 近視 是 減少 無
老花眼 遠視眼 否 時下眼睛 是 減少 正常 無
#----------- #組中:軟 近視 否 遠視沒有 正常 正常 軟
前老花眼遠目 否 正常軟
以上是必看的的30個Python語言的特點技巧(3)的詳細內容。更多資訊請關注PHP中文網其他相關文章!