2015-01-22 16 views
9

Ho un enigma della sfida mentale che voglio risolvere usando python. Forniscono 4 numeri (25, 28, 38, 35) e vogliono che inseriamo i numeri in ... + ...-... = ... Una possibile soluzione è 25 + 38-35 = 28. Ive ha provato a, fare un elenco dei numeri, li iterare con alcuni loop e un se: LST = [25, 28, 38, 35]Python: iterate attraverso una lista

for z in lst: 
    for x in lst: 
     for c in lst: 
      for v in lst: 
       if z+x-c==v: 
        print z,x,c,v 

Ma quando una corsa del ciclo for si ripetono i numeri, (25 + 25-25 = 25) e che non funzionano. Come posso risolverlo?

+11

Guardare in itertools.permutations – user2097159

+0

A parte la miglior modo di guardare a tutte le permutazioni in Python, considerano (con l'aggiunta di 'c' a entrambi i lati dell'equazione) che stai cercando due valori dai quattro, che sommano insieme metà della somma. Quindi non hai realmente bisogno di tutte le 24 permutazioni, potresti prendere in considerazione solo 6 partizioni: i primi 6 valori da 'itertools.permutations (lst, 2)'. E se i valori sono interi e la somma è dispari, dimenticatene :-) –

risposta

9

Come commento Luis' accennato, un buon approccio è

import itertools 

for z, x, c, v in itertools.permutations(lst): 
    if z+x-c==v: 
     print z,x,c,v 

"piatto è meglio di annidate", come import this ad una sessione interattiva di Python vi ricorderà :-)

1
Def recadd(lis): 
     If lis[0] + lis[1] - lis[2]] = lis[3]: 
       return lis 
     Else: 
       recadd(lis[3] + lis[0:2]) 
       recadd(lis[0] + lis[3] + lis[1:2]) 
       recadd(lis[0:1] + lis[3]. + lis[2]) 

rapida e l'hack sporco sul mio cellulare, potrebbe essere elegantemente espanso per k numeri, non testati ma dovrebbe funzionare.

Edit: ha realizzato questo non funziona se non v'è alcun ricorsione solution.infinite ...

Problemi correlati