Wciąż uczę się Pythona, a mam pytanie, którego nie byłem w stanie rozwiązać. Mam bardzo długi ciąg (miliony linii), który chciałbym podzielić na mniejszą długość łańcucha na podstawie określonej liczby wystąpień ogranicznika.Python - Dzielenie dużego ciągu przez liczbę wystąpień separatora
Na przykład:
ABCDEF
//
GHIJKLMN
//
OPQ
//
RSTLN
//
OPQR
//
STUVW
//
XYZ
//
W tym przypadku chciałbym dzielone na podstawie „//” i powrócić ciąg wszystkich liniach przed n-tego wystąpienia separatorem.
Więc wejście od podziału ciąg przez // by 1 zwróciłby:
ABCDEF
wejście od podziału ciąg przez // przez 2 zwróciłby:
ABCDEF
//
GHIJKLMN
wejściem dzielenie przez // łańcuch o 3 zwróciłby:
ABCDEF
//
GHIJKLMN
//
OPQ
i tak dalej ... jednak, Długość pierwotnego ciągu 2 milionów linii wydawała się być problemem, gdy próbowałem po prostu podzielić cały łańcuch i "//" i po prostu pracować z poszczególnymi indeksami. (Otrzymałem błąd pamięci) Być może Python nie może obsłużyć tylu linii w jednym ułamku? Więc nie mogę tego zrobić.
Szukam sposobu, w którym nie muszę rozdzielać całego łańcucha na sto tysięcy indeksów, gdy potrzebuję tylko 100, ale zamiast tego zaczynam od początku do pewnego momentu, zatrzymaj się i wróć wszystko przed nim, co, jak zakładam, może być również szybsze? Mam nadzieję, że moje pytanie jest tak jasne, jak to tylko możliwe.
Czy istnieje prosty lub elegancki sposób, aby to osiągnąć? Dzięki!
Dlaczego nie używasz generatora do czytania pierwszych n pozycji, dopóki nie przeczytasz wymaganej liczby ograniczników "//"? w ten sposób przeczytasz tylko to, czego potrzebujesz –
Dzięki, przyjrzę się także generatorom, ponieważ nie znam ich. – Indie
Pokaż, jaki kod wypróbowałeś do tej pory. –