Profilo di ValerioP

Nome ValerioP
Indirizzo email n/a
Messaggi3
  • Re: uso avanzato della funzione itertools.product
    Forum >> Principianti
    Magia dei generatori ;)

    #----------------------------------------------------------
    
    def makeseq(limits, start=0):
        for n in range(start, limits[ 0 ]+1):
            if len(limits) == 1:
                yield [ n ]
            else:
                for subseq in makeseq(limits[1:], n):
                    yield [ n ] + subseq
    
    #----------------------------------------------------------
    
    limits = 2, 2, 3, 4
    for seq in makeseq(limits):
        print(seq)
    


    --- Ultima modifica di Claudio_F in data 2016-06-19 18:47:36 ---
    Fantastico Claudio_F !! era proprio quello che cercavo ! :) GRAZIE ! :ok:
  • Re: uso avanzato della funzione itertools.product
    Forum >> Principianti
    Ciao Daniele, grazie del chiarimento.
    Si hai ragione forse non mi sono spiegato bene.
    Questo è il concetto di base:

    for a in range (0,10):
        for b in range (a,10):
             print(a,b)
    questi cicli "for" innestati uno nell'altro mi danno il seguente output:
    0 0
    0 1
    0 2
    0 3
    0 4
    1 1
    1 2
    1 3
    1 4
    2 2
    2 3
    2 4
    3 3
    3 4
    4 4
    come puoi notare quando il ciclo interno "b" arriva a fine range, a+=1 e "b" ricomincia il ciclo, ma stavolta non da 0 ma da "a".
    Quello che mi serve è un algoritmo come questo ma che mi consenta di variare a piacimento il numero di cicli interni usando una variabile.

    Inoltre vorrei poter variare a piacimento anche i valori dei singoli range.

    itertools.product permette di generare cicli multipli innestati uno nell'altro ma per quanto ne abbia capito sono sempre predeterminati al momento della scrittura del codice. invece a me serve un algoritmo che, in base ai calcoli eseguiti in altre parti del programma, impieghi N cicli innestati con range interni variabili anch'essi in base a certi calcoli; "range(x,y)" che si comportino come nell'esempio.
  • uso avanzato della funzione itertools.product
    Forum >> Principianti
    Salve a tutti, mi scuso in anticipo se la mia domanda può risultare ovvia per qualcuno, ma sono veramente agli inizi con Python e a volte alcune finezze di questo linguaggio mi sfuggono. Vi spiego il mio problema:

    Devo realizzare un algoritmo di questo tipo:

    for x in range (0,25):
        for y in range (x,15):
            print(x,y)
    ma ho necessità che sia composto di molteplici cicli for innestati uno nell'altro.
    quindi ho deciso di utilizzare la funzione product di itertools:

    from itertools import product
    
    for x,y in product(range(0,25), range(x,15)):
        print (x,y)
    però così non funziona, in quanto ovviamente la "x" in range(x,9) non la riconosce e mi segnala l'errore.

    Domanda: come posso creare un ciclo "product" che faccia ciò che fa il ciclo "for" di cui sopra ? e inoltre, come posso attribuire delle variabili al posto di "x,y" e al posto di "range(0,4,range(x,9)" in modo da poter variare a piacimento il numero di iterazioni ? un esempio di cosa vorrei fare:
    for "numero x di variabili" in product(numero n di range):
        print ("lista di variabili")
    Grazie dell'aiuto ! ;)