Il 30/04/2020 22:04, Carpediem ha scritto:
Il 30/04/2020 21:24, Alessandro T. ha scritto:Il 30/04/20 19:53, Marco Beri ha scritto:[...] La funzione zip fa questo: >>> list(zip([1,2,3], ['a', 'b', 'c'])) [(1, 'a'), (2, 'b'), (3, 'c')]Passandogli un parametro con l'* in pratica gli facciamo fare il contrario:>>> list(zip(*[(1, 'a'), (2, 'b'), (3, 'c')])) [(1, 2, 3), ('a', 'b', 'c')]Ma nel tuo caso lei fa il suo dovere, dobbiamo invece modificare il comportamento della funzione sorted:>>> ritardo_numeri_singoli_ordine_decrescente , numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,riepilogo_numeri_singoli), key=lambda x:(x[0],-x[1]), reverse=True))>>> ritardo_numeri_singoli_ordine_decrescente (55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33, 32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3, 2, 1, 0) >>> numeri_singoli_in_ordine (10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23, 33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31, 6, 7, 1)In pratica diciamo alla funzione sorted di usare per l'ordinamento inverso il primo numero così com'è (il ritardo) e il secondo numero al contrario. In alternativa potevamo dirgli di non fare l'ordine inverso e invertire il primo, il risultato non cambia:>>> ritardo_numeri_singoli_ordine_decrescente , numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli, riepilogo_numeri_singoli), key=lambda x:(-x[0],x[1]))) >>> ritardo_numeri_singoli_ordine_decrescente (55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33, 32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3, 2, 1, 0) >>> numeri_singoli_in_ordine (10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23, 33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31, 6, 7, 1)Ok, confesso che è un po' complicato (le funzioni lambda sono un pochino avanzate), però anche quello che vuoi fare tu lo è.Ciao. Marco.Ovviamente questa soluzione+spiegazione di Marco è preferibile, però dai, c'eri quasi:numeri = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]ritardo = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 38, 12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 32, 6, 25, 55]numeri_in_ordine = [] ritardo_dec = sorted(ritardo, reverse=True) posizione = 0 for ordine in range(len(ritardo_dec)): if ordine > 0 and ritardo_dec[ordine] == ritardo_dec[ordine - 1]: non_trovato = True while non_trovato: # sostituito il True if ritardo_dec[ordine] == ritardo[posizione + 1]: # posizione = ritardo.index(ritardo_dec[posizione + 1])numeri_in_ordine.insert(ordine, numeri[posizione + 1]) # aggiunto +1non_trovato = False else: posizione += 1 else: posizione = ritardo.index(ritardo_dec[ordine]) numeri_in_ordine.insert(ordine, numeri[posizione]) print() print(numeri) print(ritardo) print() print(numeri_in_ordine) print(ritardo_dec) ciaoGrazie Alessandro ho giusto scritto a Marco che resto incuriosito sul perchè la mia soluzione non funzionassepraticamente dov'era l'errore? nel posizione mentre ci voleva posizione +1? la voglio provare passo passo per capire.Grazie, anche perchè sono contento che la sensazione di essere vicino alla soluzione era fondata.Che bella lista!!!Ciao Alessandro, come ti avevo detto, ho confrontato il tuo codice con il mio e ho compreso la stupidità del mio errore.
Come hai detto tu, c'ero quasi. Ma ero concentrato a cercare dove non dovevo. Hai tolto il while true ma anche con quello
e la relativa istruzione break funziona bene comunque. Perfetto così. Da domani mi devo concentrare per assimilare il
lavoro che fa la funzione zip illustrata da Marco e poi capire l'uso che ne ha fatto con quel key =lambda .... Grazie ancora ad entrambi
mi avete regalato stimoli e consapevolezza. Isidoro
_______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
_______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python