10個python使用技巧

2021-10-08 06:12:02 字數 4940 閱讀 8691

1. 用zip處理列表

假設要合併相同長度的列表並列印結果。同樣有一種更通用的方式,即用zip()函式獲得想要的結果,**如下:

countries=

['france'

,'germany'

,'canada'

]capitals =

['paris'

,'berlin'

,'ottawa'

]for country, capital in

zip(countries,capitals)

:print

(country, capital)

#輸出:

# france paris

# germany berlin

# canada ottawa

2. 使用python collections

python collections是容器資料型別,即列表、集合、元組、字典。collections模組提供了可以增強**的高效能資料型別,使工作更加簡潔容易。它還提供了許多功能,以下使用counter() 函式進行演示。

counter() 函式採用乙個可迭代物件(如列表或元組),並返回乙個counter字典。字典的鍵是迭代器中唯一存在的元素,每個鍵的值是該元素在迭代器**現次數的計數。

為建立乙個counter物件,將乙個迭代的(列表)傳遞給counter()函式,**如下。

'''

'''from collections import counter

count = counter(

['a'

,'b'

,'c'

,'d'

,'b'

,'c'

,'d'

,'b'])

print

(count)

# counter()

3. 使用itertools

python的itertools模組是用於處理迭代器的工具集合。itertools包含多種工具,用於生成輸入資料的可迭代結果。這裡以itertools.combinations()為例。itertools.combinations()用於構建組合。這些是輸入量的可能組合項。

舉乙個現實中的例子來闡明以上觀點:

假設乙個錦標賽中有4個隊伍,在聯賽階段,每個隊伍都要與其他每個隊伍進行比賽。任務是列出所有比賽隊伍的可能組合。

**如下:

import itertools

friends =

['team 1'

,'team 2'

,'team 3'

,'team 4'

]list

(itertools.combinations(friends, r=2)

)# [('team 1', 'team 2'), ('team 1', 'team 3'), ('team 1', 'team 4'), ('team 2', 'team 3'), ('team 2', 'team 4'), ('team 3', 'team 4')]

需要注意的是,值的順序不重要。因為(『team 1』, 『team 2』)和(『team 2』, 『team 1』)代表同一對,所以輸出列表只需包含其中乙個。相似的,可以使用itertools.permutations()以及來自該模組的其他函式。

4 使用列表推導式

列表推導式用於從其他可迭代物件中建立新列表。列表推導式返回列表時,由包含表示式的方括號組成,該表示式對於每個元素以及用於迴圈遍歷每個元素的for迴圈執行。由於對python直譯器進行了優化,可以在迴圈期間發現可**的模式,因此列表推導速度更快。

如下,使用列表推導式計算前五個整數的平方:

m =

[x**

2for x in

range(5

)]print

(m)# [0, 1, 4, 9, 16]

再如,使用列表推導式查詢兩個列表中的公共數字:

'''

'''list_a =[1

,2,3

,4]list_b =[2

,3,4

,5]common_num =

[a for a in list_a for b in list_b if a == b]

print

(common_num)

# [2, 3, 4]

5. 將兩個列表轉換為乙個字典

假設有兩個列表,乙個列表內容為學生姓名,另乙個內容為學生分數。使用zip函式,將這兩個列表轉換為乙個字典,**如下:

students=

["peter"

,"julia"

,"alex"

]marks =[84

,65,77

]dictionary =

dict

(zip

(students, marks)

)print

(dictionary)

#

6. 字串拼接

拼接字串時可用for迴圈來逐個新增元素,但這非常低效(特別是當列表很長時)。在python中,字串是不可變的,因此拼接字串時,必須將左、右字串複製到新的字串中。

更好的方法是使用join() 函式,如下所示:

haracters=

['p'

,'y'

,'t'

,'h'

,'o'

,'n'

]word =

"".join(characters)

print

(word)

# python

7. 使用sorted()函式

在python中使用內建函式sorted()可以輕而易舉地對任何序列進行排序,它能完成很多艱難的工作。sorted()可對任何序列(列表、元組)進行排序,並返回已排序的元素列表。如下對數字進行公升序排列:

sorted([

3,5,

2,1,

4])# [1, 2, 3, 4, 5]

如下對字串進行降序排列:

sorted([

'france'

,'germany'

,'canada'

,'india'

,'china'

], reverse=

true

)# ['india', 'germany','france', 'china', 'canada']

9. 用enumerate()迭代

enumerate()方法向可迭代物件新增乙個計數器,並以列舉物件的形式返回。

以下是乙個經典的編碼方面的面試問題(通常被稱為fizz buzz問題)。

編寫乙個程式來列印列表中的數字。若數字是3的倍數,輸出「fizz」;是5的倍數,輸出「buzz」;既是3又是5的倍數,輸出「fizzbuzz」

'''

'''numbers=[30

,42,28

,50,15

]for i, num in

enumerate

(numbers)

:if num %3==

0and num %5==

0:numbers[i]

='fizzbuzz'

elif num %3==

0:numbers[i]

='fizz'

elif num %5==

0:numbers[i]

='buzz'

print

(numbers)

# ['fizzbuzz', 'fizz', 28, 'buzz', 'fizzbuzz']

10. 使用python generators(生成器)

generator函式允許建立類似迭代器的函式。他們允許程式設計師以一種簡單快速的方式建立迭代器。下面通過乙個例子來解釋這個概念。

假設要對從1開始的前100000000個完全平方數求和。

看起來很容易對吧。使用列表推導式可以很輕鬆的做到這一點,但是它的輸入量過大。下面為一示例:

'''

'''import time

t1 =time.clock(

)sum

([i * i for i in

range(1

,100000000)]

)t2 = time.clock(

)time_diff = t2 - t1

print

(f"it took secs to execute this method"

)# ittook 13.197494000000006 secs to execute this method

import time

t1 = time.clock(

)sum

((i * i for i in

range(1

,100000000))

)t2 = time.clock(

)time_diff = t2 - t1

print

(f"it took secs to execute this method"

)# ittook 9.53867000000001 secs to execute this method

如上,所花費時間已大大減少。輸入量越大,減少效果越顯著。

10個Python小技巧

flag true if flag x 1else x 2print x 簡化形式 flag true x 1 if flag else 2 print x sum 0 for i in range 0,101 sum i print sum 利用求和函式sum print sum range 0,...

10個Python程式設計小技巧

2a,b b,a 實現了對兩個數的交換 a,b 2,1 name jack country china age 18 1.傳統的字串拼接 很繁雜 print hi,i m name i m from country and i m str age years old.2.百分號語法 print hi...

Python 分享10個PyCharm技巧

0.pycharm 常用快捷鍵 1.檢視使用庫原始碼 pycharm 主程式設計師在 stackoverflow 上答道 經常聽人說,多看原始碼。原始碼不僅能幫我們搞清楚執行機制,還能學習優秀的庫或者框架的最佳實踐。呼叫庫時,你可以在你好奇的幾乎任何地方點選 command b,就可以很方便的跳轉到...