Chciałbym przejrzeć listę, porównując każdą pozycję z następującą po niej.
Czy istnieje sposób, aby przejść przez wszystkie elementy oprócz ostatniego, używając funkcji for x in y? Wolałbym to zrobić bez korzystania z indeksów, jeśli mogę.
Uwaga
freespace odpowiedział na moje aktualne pytanie, dlatego przyjąłem odpowiedź, ale SilentGhost odpowiedział na pytanie, które powinienem był zadać.
Przepraszamy za zamieszanie.
y
jest generator?najłatwiejszy sposób porównania elementu sekwencji z następującymi:
źródło
Jeśli chcesz uzyskać wszystkie elementy w parze sekwencji, użyj tego podejścia (funkcja parowania pochodzi z przykładów w module itertools).
Jeśli chcesz porównać ostatnią wartość z jakąś specjalną wartością, połącz tę wartość do końca
źródło
jeśli chodziło Ci o porównanie n-tego elementu z n + 1-tym elementem na liście, z którym też możesz zrobić
uwaga, nie ma tam żadnego twardego kodowania. To powinno być w porządku, chyba że czujesz inaczej.
źródło
Aby porównać każdy element z następnym w iteratorze bez tworzenia wystąpienia listy:
źródło
Odpowiada to o co OP powinien był zapytać , tj. Przejść przez listę porównującą kolejne elementy (doskonała odpowiedź SilentGhost ), ale uogólnioną dla dowolnej grupy ( n-gram ): 2, 3, ...
n
:zip(*(l[start:] for start in range(0, n)))
Przykłady:
Objaśnienia:
l[start:]
generuje listę / generator zaczynając od indeksustart
*list
lub*generator
: przekazuje wszystkie elementy do otaczającej funkcji,zip
tak jakby została napisanazip(elem1, elem2, ...)
Uwaga:
AFAIK, ten kod jest tak leniwy, jak tylko może być. Nie testowany.
źródło