更快找到组合的方法?

时间:2016-04-22 07:24:21

标签: python python-3.x combinations itertools

我正试图在np.linspace(0,n,n*10+1)之间找到所有可能的子间隔 其中子间隔大于宽度(比如宽度= 0.5)

所以我尝试使用

的itertools
import itertools
ranges=np.linspace(0,n,n*10+1)
#find all combinations
combinations=list(itertools.combinations(ranges,2))
#using for-loops to calculate width of each intervals
#and append to new list if the width is greater than 0.5
save=[]
for i in range(len(combinations)):
    if combinations[i][1]-combinations[i][0]>0.5:
        save.append(combinations[i]) 

但这需要太多次,特别是当n变得更大时,特别是它需要大量的ram使用

所以我想知道我是否可以更快地修改函数或在收集组合时设置约束

1 个答案:

答案 0 :(得分:3)

itertools.combinations(...)返回一个生成器,这意味着返回的对象在需要时生成其值,而不是一次计算所有内容并将结果存储在内存中。您可以通过将其转换为列表来强制立即计算和存储,但这是不必要的。只需迭代combinations对象而不是列出它并迭代索引(不管怎样都不应该这样做):

import itertools
ranges=np.linspace(0,n,n*10+1)  # alternatively 'range(100)' or so to test
combinations=itertools.combinations(ranges,2)
save=[]

for c in combinations:
    if c[1] - c[0] > 0.5:
        save.append(c)