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

--
Alessandro T.

R: Perché leggiamo dall'alto al basso e da sinistra a destra.
D: Perché dovrei iniziare la risposta all'e-mail dopo il testo citato?

_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Reply via email to