2017-10-06 64 views
0

我需要,如果可能的这段代码限制到最大一个循环或更少:如何优化此代码一个环路或最小可能

for i in range(1,count+1): 

    for j in range(i+1,count+1): 

    newcount+=1 

基本上它是寻找可能的组合,而无需repition。

+2

'ne wcount + =(count-1)* count/2' – pacholik

+0

你不能使用'itertools.combinations'吗? – SpoonMeiser

+0

@SpoonMeiser:如果'i,j'完全不用,那将是一个过度杀伤。 –

回答

3

它看起来像一个triangular number之间1count - 1

count * (count - 1) // 2 

这里有一个小测试:

count = 10 
newcount = 0 

for i in range(1,count+1): 
    for j in range(i+1,count+1): 
    newcount+=1 

print(newcount) 
# 45 
print(newcount == count * (count - 1) // 2) 
# True 
0

我会建议itertools.combinations

在你的情况,你可以迭代器来​​

+0

@EricDuminil对,我在这里速度太快了。我将编辑为不要将人引向错误的方向。 –