Ho un elenco con valori ripetuti come mostrato di seguito:valore pista cambiamenti in un elenco ripetitivo in Python
x = [1, 1, 1, 2, 2, 2, 1, 1, 1]
Questo elenco viene generato da un modello corrispondente espressione regolare (non illustrato qui). L'elenco è garantito per avere valori ripetuti (molte, molte ripetizioni - centinaia, se non migliaia), e non è mai organizzato in modo casuale perché è quello che la regex corrisponde ogni volta.
Quello che voglio è quello di monitorare gli indici della lista in cui le voci cambiano dal valore precedente. Pertanto, per l'elenco sopra riportato x
, desidero ottenere un elenco di rilevamento delle modifiche [3, 6]
che indica che x[3]
e x[6]
sono diversi dalle loro voci precedenti nell'elenco.
Sono riuscito a farlo, ma mi chiedevo se c'era un modo più pulito. Ecco il mio codice:
x = [1, 1, 1, 2, 2, 2, 1, 1, 1]
flag = []
for index, item in enumerate(x):
if index != 0:
if x[index] != x[index-1]:
flag.append(index)
print flag
uscita: [3, 6]
Domanda: C'è un modo più pulito per fare quello che voglio, in un minor numero di righe di codice?
ben guardarlo si potrebbe sbarazzarsi di 'lag' da solo utilizzando' index-1' nella vostra seconda istruzione if, e cambiare il secondo caso a '=' e in questo modo si può cadere! il resto e sposta tale codice fino al valore –
@JamesKent Questa è una buona idea. Ho aggiornato la domanda e il codice. Grazie. – prrao
Hai già 'item', quindi non hai più bisogno di accedere a' x [index] 'per il confronto a' x [index-1] ' –