改進,python從陣列中找出所有和為M的組合

2021-10-10 04:54:04 字數 1650 閱讀 3560

根據《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,如果是,則...