Byłaś całkiem blisko, pokażę ci alternatywny sposób, że może być bardziej intuicyjna, jeśli dopiero zaczynasz:
sets = [(myList[i-1], myList[i]) for i in range(len(myList)) if myList[i] == 9]
Zdobądź indeks w zakres długości listy, a jeśli wartość na pozycji i
jest równa 9
, chwyć sąsiednie elementy.
Wynikiem jest:
sets
[(8, 9), (4, 9), (7, 9)]
To mniej wydajny niż inne podejścia ale postanowiłem un-go usunąć, aby pokazać inny sposób to robić. Można zrobić to iść nieco szybciej za pomocą enumerate()
zamiast:
sets = [(myList[i-1], j) for i, j in enumerate(myList) if j == 9]
biorą pod uwagę że w przypadku krawędzi gdzie myList[0] = 9
zachowanie pojmowania bez zip
i zachowanie zrozumienie z zip
jest różne.
szczególności, jeśli myList = [9, 1, 8, 9, 2, 4, 9, 6, 7, 9, 8]
następnie:
[(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)]
natomiast:
[(x, y) for x, y in zip(myList, myList[1:]) if y==9]
# results in: [(8, 9), (4, 9), (7, 9)]
To do ciebie, aby zdecydować, który z nich pasuje do Twoich kryteriów, jestem po prostu wskazując, że don” t zachowują się tak samo we wszystkich przypadkach.
pełni identyczną do mojej odpowiedzi :) – SuperSaiyan
@SuperSaiyan wyjątkiem tego, że twój nie wspomina główny problem PO miał ich użytkowania z 'myList [i: i]'. –
Powiązane lektury dla OP [Wyjaśnij notację plasterka Pythona] (http://stackoverflow.com/q/509211) –