根據《python從陣列中找出所有和為m的組合》python**按位運算緩慢,改為遍歷組合字串,執行速度得到明顯提公升,按理說按位運算速度是最快的,這就是python嗎?愛了愛了
改進python**如下
import time
defsearch
(list
, count,
sum)
:# list待查詢數值列表, count要求元素個數, sum待查詢的和m
length =
len(
list
)# 列表元素個數
res =
# 空列表,存放 「和為sum的所有組合」
bin=
''.replace(
'x',
str(length)
)# 二進位制高位補0,二進位制位數一致
for i in
range(1
,1<< length)
:# 遍歷所有組合(1-2的length次方減1)
bin_str =
bin.
format
(i)# 將數值轉為二進位制
if bin_str.count(
'1')
== count:
# 判斷組合內元素數量與count是否一致
s =0 temp =
for k in
range(0
, length)
:# 左閉右開,遍歷該組合,對應列表
if bin_str[k]
=='1'
: s +=
list
[k]list
[k])
if s ==
sum:
# 將正確的組合巢狀至列表
return res
#print(search([1,2,3,4], 2, 5)) # 結果[[2, 3], [1, 4]]
if __name__ ==
'__main__'
: start_time = time.time(
) list_100 =
list
(range(1
,21))
# 1-20的列表
print
(search(list_100,2,
15)) end_time = time.time(
)print
(end_time - start_time)
# 程式用時,秒
執行結果:執行速度提高了4-5倍
列表範圍
原耗時現耗時
[1 : 20]
2.7s
0.66s
[1 : 21]
5.7s
1.34s
[1 : 22]
12s2.68s
[1 : 23]
25s5.36s
[1 : 24]
52s10.89s
[1 : 25]
109s
22s[1 : 26]
227s
43.82s
[1 : 27]
472s
87.76s
python 中從list表中找出質數
很抱歉之前上傳了乙個錯誤的方法,後來自己檢查發現是錯的。以下是我花了半個小時寫的,真的對不起之前的那些看了我的博文的同行,def zhishu list for i in list 遍歷列表 for j in range 2,int i 2 這裡是判斷這個數能不能給除了1和本身以外的數整除,剛開始的...
03 找出陣列中重複的數字 python
題目 在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍內。數字中的某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出時重複的數字2或者3。1 使用字典 def duplicate nums dic ...
陣列 找出陣列中重複的數字
找出陣列中重複的數字 題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。方法 比較數字m是不是等於i,如果是,則...