簡體   English   中英

如何在 python 中更快地進行組合

[英]How to make combinations faster in python

我正在 python 中編寫代碼,其中我需要最多 1000 個元素的所有可能組合,然后對它們執行多個操作。 有什么辦法可以減少運行時間。 通過使用 itertools,運行時間只需 50 個元素后的幾分鍾。 目前我正在使用這段代碼(我已經注釋掉了 print 語句,因為它顯着增加了運行時間):

import itertools
import time

def all_combos_func(arguments):
    data = list(arguments)
    return itertools.chain.from_iterable(itertools.combinations(data, r) for r in range(len(data)+1))

start_time = time.time()

all_comb= []
for i in range (1000):
    all_comb.append(i+1)
all_combos = all_combos_func(all_comb)
all_combos_count = []
for i in all_combos:
    all_combos_count.append(i)
    # print(i)
print("this is the total length", len(all_combos_count))
end_time = time.time()

print(end_time-start_time)
>>> len(all_combos_func(range(0))
1
>>> len(all_combos_func(range(1))
2
>>> len(all_combos_func(range(2))
4
>>> len(all_combos_func(range(3))
8
>>> len(all_combos_func(range(4))
16

您的all_combos_func正在返回2^(len(input))組合。 因此,當您要求所有組合並傳入 1000 個元素列表時,您會得到 2^1000 個結果。 是的,這需要一段時間。

2^1000 = 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM