Il problema: Ho due liste che contengono tuple (ciascuna composta di un timbro di tempo e di una coda di lunghezza) che devono essere fuse:unire due liste di tuple con timestamp e coda lunghezze
L1 = [[0, 50], [7.75, 120], [10.25, 70], [17, 100], [20, 60]]
L2 = [[0, 80], [8, 120], [10, 85], [10.25, 80]]
ho bisogno di una funzione che restituisce merge(L1,L2)
:
[[ 0.00, 50+80 ],
[ 7.75, 120+80 ],
[ 8.00, 120+120],
[10.00, 85+120],
[10.25, 70+80 ],
[17.00, 100+80 ],
[20.00, 60+80 ]] # note
[nota: non ho bisogno del 60+80
- si tratta semplicemente di indicare quali valori vengono aggiunti la ri Sult di 60+80
= 140
è quello che mi serve]
Quello che ho estratto dalla uscita di cui sopra è che io sono più volte:
- Popping il valore più piccolo
V
dalla lista fusione di timestamp distinti (il sindacato setwise ditimestamps
). - Aggiunta della lunghezza della coda dall'elenco non
V
di timestamp minore o uguale aV
. - ... fino a
V
esaurito.
Il mio problema: Sono abbastanza sicuro che heapq può risolverlo, ma non si può ottenere la mia testa intorno a come strutturare la soluzione utilizzando il heapq-modulo.
Maggiori dettagli vagante del processo:
- Nella prima fase - alle 0.00 e fino alle 7,75 la lunghezza della coda composto è
50+80
- tratto daL1[0][0] == L2[0][0]
- posso aggiungere i valori
L1[0][1]+L2[0][1] = 50+80
. Ora ho usatoL1[0][:]
eL2[0][:]
- Nella seconda fase - alle 7,75 - la coda di L2 non è aumentata, ma la coda di L1 ha:
L1[1][0] = 120
. Per ottenere la lunghezza della coda composta è quindi necessario aggiungereL1[1][1]
conL2[0][1]
per ottenere120+80
. - Ora ho usato il primo valore più grande di qualsiasi altro registrato in precedenza e lo devo fare per i passaggi successivi fino a quando gli intervalli di tempo non sono stati esauriti (dopo 23.99). Il prossimo valore più grande nel set di "time" è
L2[1][0]
che è 8,00. - Poiché 8,00 è più grande di 7,75 ho bisogno di unire questi valori in modo che alle 8.00 la lunghezza della coda sia 120 + 120 in base al valore più grande di L1 che è inferiore a 8,00 - che è 7,75. Con la presente aggiungo L1 1 e L2 1.
- Nel passaggio successivo il valore maggiore non utilizzato è 10,00 da L2. La lunghezza della coda da
L2
deve essere unita al valore maggioreL1
, ovvero minore o uguale a 10.00 ... - E così continua ...
funziona come previsto :-) – Wolf
arco Bella risposta \ 0 / – The6thSense