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,就可以很方便的跳轉到...