2017-10-06 4 views
0

minimum que je dois limiter ce code à un maximum d'une boucle ou moins si possible:Comment puis-je optimiser ce code à une boucle ou possible

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

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

    newcount+=1 

Fondamentalement, ce qu'il fait est de trouver les combinaisons possibles sans repition.

+2

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

+0

Ne pouvez-vous pas utiliser 'itertools.combinations'? – SpoonMeiser

+0

@ SpoonMeiser: Si 'i, j' ne sont pas utilisés du tout, ce serait une surcharge. –

Répondre

3

Il ressemble à un triangular number entre 1 et count - 1:

count * (count - 1) // 2 

Voici un petit test:

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

Je recommande itertools.combinations

Dans votre cas, vous pouvez itérateur sur itertools.combinations(xrange(1, count+1), 2)

+0

@EricDuminil à droite, je suis allé trop vite ici. Je vais modifier comme ne pas diriger les gens dans la mauvaise direction. –