python 字典中使用了 hash table,因此查詢操作的複雜度為 o(1),而 list 實際是個陣列,在 list 中,查詢需要遍歷整個 list,其複雜度為 o(n),因此對成員的查詢訪問等操作字典要比 list 更快。
set 的 union, intersection,difference 操作要比 list 的迭代要快。因此如果涉及到求 list 交集,並集或者差的問題可以轉換為 set 來操作。
對迴圈的優化所遵循的原則是儘量減少迴圈過程中的計算量,有多重迴圈的盡量將內層的計算提到上一層。
python 中的字串物件是不可改變的,因此對任何字串的操作如拼接,修改等都將產生乙個新的字串物件,而不是基於原字串,因此這種持續的 copy 會在一定程度上影響 python 的效能。
out =
"%s%s%s%s"
%(head, prologue, query, tail)
避免
out =
""+ head + prologue + query + tail +
""
列表解析要比在迴圈中重新構建乙個新的 list 更為高效
for w in
list
:
列表解析:
total =
[w for w in
list
]
python效能優化技巧
1. 列表排序後的索引
arr =[1
,2,3
,0,1
,9,8
]sorted
(range
(len
(arr)
), key=
lambda k: arr[k])[
3,0,
4,1,
2,6,
5]
2. 兩個維度均降序(優先第乙個維度)
arr=[[
0,0]
,[1,
0],[
1,1]
,[0,
1]]arr.sort(key=
lambda x:
[-x[0]
,-x[1]
])arr[[0
,0],
[0,1
],[1
,0],
[1,1
]]
1. 利用虛數求解一元一次方程
eq=
'2*x+1=3'
equ=eq.replace(
'=',
'-(')+
')'c=
eval
(equ,
)if c.imag==0:
print(-
1)else
: x=
-c.real/c.imag
print
(c)1
方法一:
digit=
while n:10)
n=n//
10
方法二:
digit=
[int
(_)for _ in
str(n)
]
官方教程
乙個 counter 是乙個 dict 的子類,用於計數可雜湊物件。它是乙個集合,元素像字典鍵(key)一樣儲存,它們的計數儲存為值。計數可以是任何整數值,包括0和負數。
from collections import counter
colors =
['red'
,'blue'
,'red'
,'green'
,'blue'
,'blue'
]c = counter(colors)
print
(dict
(c))
c = counter(
['eggs'
,'ham'])
c['bacon'
]# 不存在就返回0
#0
c[
'sausage']=
0# counter entry with a zero count
del c[
'sausage'
]
c = counter(a=
4, b=
2, c=
0, d=-2
)list
(c.elements())
#['a', 'a', 'a', 'a', 'b', 'b']
counter(
'abracadabra'
).most_common(3)
#[('a', 5), ('r', 2), ('b', 2)]
python程式設計技巧
將乙個字串轉化成ascii碼並遍歷 for c in map ord,raw input 將乙個字串轉化成ascii碼並儲存到列表 l ord i ord a for i in input 字典,如果key存在則value 1否則建立 key,value 0 mp d sum mp d get d,...
Python高效程式設計技巧
關鍵字 python 高效 程式設計 開源 原文 我已經使用python程式設計有多年了,即使今天我仍然驚奇於這種語言所能讓 表現出的整潔和對dry程式設計原則的適用。這些年來的經歷讓我學到了很多的小技巧和知識,大多數是通過閱讀很流行的開源軟體,如django,flask,requests中獲得的。...
Python優雅程式設計技巧
標籤 空格分隔 python 需求 把list所有成員元素加倍。普通的方式 bag 1,2,3,4,5 for i in range len bag bag i bag i 2優雅的方式 bag 1,2,3,4,5 bag elem 2 for elem in bag 普通的方式 bag 1,2,3...