ValerioP
Profilo di
Nome | ValerioP |
---|---|
Indirizzo email | n/a |
Messaggi | 3 |
-
- 2016-06-19 19:07:27
- Re: uso avanzato della funzione itertools.product
- Forum >> Principianti
- Claudio_F said @ 2016-06-19 18:41:39: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 !
-
- 2016-06-18 19:02:35
- 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.
-
- 2016-06-18 12:49:04
- 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 !