Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    tutte le disposizioni degli elementi di una lista

    salve a tutti, vorrei creare un programma che mostri tutte le possibili disposizioni di una lista di elementi
    ho provato utilizzando una funzione ricorsiva come quella qui sotto (scritta in python) ma non mi riesce
    codice:
    def disposizioni(char,list):
        if len(char) == 1:
            a = char.pop()
            list.append(a)
            print list
            list = []
        else:
            for k in char:
                list.append(k)
                char.remove(k)
                disposizioni(char,list)
    ogni funzione non dovrebbe funzionare con variabili locali alla stessa funzione e non interferire con gli altri processi del programma?

  2. #2

  3. #3
    1) list e' un termine gia' usato da python quindi cambialo
    2) Se continui ad usare la stessa variabile passata negli argomenti della funzione quella te li cambia anche fuori della funzione, quindi metti il contenuto di quella lista in un'altra variabile all'interno della funzione

  4. #4
    prima usavo una variabile interna ma non andava riprovo

  5. #5
    ho scpoerto il mio problema:
    la funzione non opera come pensavo, la lista char viene costantemente modificata dalle funzioni chiamate successivamente, e non come pensavo "tenuto in memoria" dalla funzione con la quale stavo operando
    come posso ovviare a questo problema?
    dovrei forse passare una nuova variabile con i valori da disporre?

  6. #6
    come posso fare creare ad ogni funzione una variabile "supelocale", nel senso che non venga toccata dalla ricorsione della stessa?

  7. #7
    ho trovato un sistema ma dubito sia il più efficiente (cosi' si spreca molta potenza di calcolo in calcoli gia' fatti) ma pelomeno funziona, il grosso problema dell'altro metodo e' il dover creare una nuova variabile ad ogni iterazione
    codice:
    def disp(lista,n):
            w = len(lista)
    	tot = 1
    	while w != (len(lista)-n):
                tot = tot*w
                w=w-1           
    	from random import *
    	print "ci sono",tot,"possibili combinazioni"
    	dispo = []
    	while len(dispo) != tot:
    		shuffle(lista)
    		d = lista[0:n]
    		if d not in dispo:
    			dispo.append(d)
                      return dispo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.