Python 找到组合的更快方法?

Python 找到组合的更快方法?,python,python-3.x,combinations,itertools,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 app

我试图找到
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使用


因此,我想知道当我收集组合时,是否可以更快地修改函数或设置约束。组合(…)返回生成器,这意味着返回的对象在需要时生成其值,而不是一次计算所有内容并将结果存储在内存中。您可以通过将其转换为列表来强制立即计算和存储,但这是不必要的。只需迭代
组合
对象,而不是列出它并迭代索引(无论如何都不应该这样做):


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


len(compositions)
根本不应该工作。@Byte Commander抱歉,它应该是combines=list(blah)
len(compositions)
根本不应该工作。@Byte Commander抱歉,它应该是combines=list(blah)@,这正是使用pypy可以大大提高速度的代码。如果左侧的灰色圆形复选标记有助于您解决问题,请不要忘记接受此答案。此外,请使用pypy运行它,这正是使用pypy将获得巨大加速的代码类型。如果有助于解决问题,请不要忘记单击左侧的灰色圆形复选标记来接受此答案。
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)