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 +1
                non_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)


ciao


Grazie Alessandro ho giusto scritto a Marco che resto incuriosito sul perchè la mia soluzione non funzionasse

praticamente 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

Rispondere a