Si erano abbastanza vicino, vi mostrerò un modo alternativo che potrebbe essere più intuitiva se si sta appena iniziando:
sets = [(myList[i-1], myList[i]) for i in range(len(myList)) if myList[i] == 9]
ottenere l'indice nel intervallo della lunghezza dell'elenco e se il valore nella posizione i
è uguale a 9
, afferrare gli elementi adiacenti.
Il risultato è:
sets
[(8, 9), (4, 9), (7, 9)]
Questo è meno efficiente rispetto agli altri approcci ma ho deciso di non-eliminarlo visualizzare un modo diverso di farlo. È possibile farlo andare un po 'più veloce utilizzando enumerate()
invece:
sets = [(myList[i-1], j) for i, j in enumerate(myList) if j == 9]
Prendere nota che nel caso bordo dove myList[0] = 9
il comportamento della comprensione, senza zip
e il comportamento del comprensione con zip
è diverso.
In particolare, se myList = [9, 1, 8, 9, 2, 4, 9, 6, 7, 9, 8]
poi:
[(myList[i-1], myList[i]) for i in range(len(myList)) if myList[i] == 9]
# results in: [(8, 9), (8, 9), (4, 9), (7, 9)]
mentre:
[(x, y) for x, y in zip(myList, myList[1:]) if y==9]
# results in: [(8, 9), (4, 9), (7, 9)]
Spetta a voi decidere quale di questi si adatta alle vostre criteri, sto solo sottolineando che don' si comportano allo stesso modo in tutti i casi.
completamente identica alla mia risposta :) – SuperSaiyan
@SuperSaiyan eccezione del fatto che il vostro non parlare del problema principale del PO ha avuto, il loro utilizzo di 'myList [i: i]'. –
Lettura correlata per l'OP [Spiegazione della notazione slice di Python] (http://stackoverflow.com/q/509211) –