Lesson 5
Smyczki
1. Smyczki
Ciąg może być odczytany ze standardowego wejścia za pomocą funkcji input() lub zdefiniowany w pojedynczym lub podwójnym cudzysłowie. Można połączyć dwa ciągi znaków, a także powtórzyć ciąg n razy mnożąc go przez liczbę całkowitą:
print('>_< ' * 5) # > _ <> _ <> _ <> _ <> _ <
Łańcuch w Pythonie to ciąg znaków. Funkcja len(some_string) zwraca liczbę znaków w ciągu znaków:
print(len('abcdefghijklmnopqrstuvwxyz')) # 26
Każdy obiekt w Pythonie można przekonwertować na ciąg znaków za pomocą funkcji str(some_object) . Możemy konwertować liczby na łańcuchy:
s = str(2 ** 100) print(s) # 1267650600228229401496703205376 print(len(s)) # 31
2. Plastry: pojedynczy znak
Plasterek daje z danego ciągu jeden znak lub jakiś fragment: podciąg lub podciąg.
Istnieją trzy formy plasterków. Najprostsza forma wycinka: pojedynczy wycinek znaku S[i] podaje i ty znak ciągu. Liczymy znaki od 0. To znaczy, jeśli , , , , , . Zauważ, że w Pythonie nie ma oddzielnego typu dla znaków ciągu. S[i] ma również typ str , podobnie jak ciąg źródłowy.
Numer i w S[i] nazywany jest indeksem .
Jeśli określisz indeks ujemny, to zostanie on policzony od końca, zaczynając od liczby -1 . To znaczy, , , , , .
Podsumujmy to w tabeli:
| String S | H | mi | l | l | o |
|---|---|---|---|---|---|
| Indeks | S [0] | S [1] | S [2] | S [3] | S [4] |
| Indeks | S [-5] | S [-4] | S [-3] | S [-2] | S [-1] |
Jeśli indeks w wycinku S[i] jest większy lub równy len(S) lub mniejszy niż -len(S) , pojawia się następujący błąd IndexError: string index out of range .
3. Plasterki: podciąg
Plasterek z dwoma parametrami S[a:b] zwraca podciąg długości b - a , zaczynając od znaku o indeksie a i trwającego aż do znaku w indeksie b , nie licząc ostatniego. Na przykład S[1:4] == 'ell' , możesz uzyskać ten sam podłańcuch używając S[-4:-1] . Możesz mieszać indeksy dodatnie i ujemne w tym samym wycinku, na przykład S[1:-1] to podłańcuch bez pierwszego i ostatniego znaku ciągu (wycinek zaczyna się od znaku o indeksie 1 i kończy się indeksem -1, bez tego).
Plastry z dwoma parametrami nigdy nie powodują IndexError . Na przykład dla S == 'Hello' wycinek S[1:5] zwraca ciąg 'ello' , a wynik jest taki sam, nawet jeśli drugi indeks jest bardzo duży, jak S[1:100] .
Jeśli pominiesz drugi parametr (ale zachowasz dwukropek), to plasterek przejdzie na koniec łańcucha. Na przykład, aby usunąć pierwszy znak z ciągu (jego indeks to 0), weź wycinek S[1:] . Podobnie, jeśli pominiesz pierwszy parametr, to Python pobierze plasterek od początku łańcucha. To znaczy, aby usunąć ostatni znak z ciągu, możesz użyć wycinka S[:-1] . Fragment S[:] pasuje do samej litery S
4. Plastry: niezmienność strun
Każdy wycinek łańcucha tworzy nowy ciąg i nigdy nie modyfikuje oryginału. W Pythonie ciągi są niezmienne, tzn. Nie mogą być zmienione jako obiekty. Możesz przypisać zmienną tylko do nowego ciągu, ale stara pozostanie w pamięci.
W rzeczywistości w Pythonie nie ma zmiennych. Są tylko nazwy powiązane z dowolnymi obiektami. Możesz najpierw skojarzyć nazwę z jednym obiektem, a następnie - z innym. Czy kilka nazw może być powiązanych z jednym i tym samym obiektem.
Pokażmy, że:
s = 'Hello' t = s # s i t wskazują na ten sam ciąg t = s[2:4] # teraz t wskazuje na nowy ciąg "ll" print(s) # wyświetla "Hello", ponieważ s nie jest zmieniane print(t) # drukuje "ll"
5. Plastry: podciąg
Jeśli wybierzesz plaster z trzema parametrami S[a:b:d] , trzeci parametr określa krok, taki sam jak dla range() funkcji range() . W takim przypadku przyjmowane są tylko znaki o następującym indeksie: a a + d , a + 2 * d i tak dalej, aż do znaku z indeksem b . Jeśli trzeci parametr jest równy 2, plasterek pobiera co drugi znak, a jeśli krok segmentu jest równy -1 , znaki są odtwarzane w odwrotnej kolejności. Na przykład możesz odwrócić ciąg znaków w następujący sposób: S[::-1] . Zobaczmy przykłady:
s = 'abcdefg' print(s[1]) print(s[-1]) print(s[1:3]) print(s[1:-1]) print(s[:3]) print(s[2:]) print(s[:-1]) print(s[::2]) print(s[1::2]) print(s[::-1])
range() :s = 'abcdefghijklm'
print(s[0:10:2])
for i in range(0, 10, 2):
print(i, s[i])
6. Metody ciągów: find () i rfind ()
Metoda jest funkcją związaną z obiektem. Po wywołaniu metody metoda jest stosowana do obiektu i wykonuje z nim pewne obliczenia. Metody są wywoływane jako object_name.method_name(arguments) . Na przykład w s.find("e") metoda łańcucha find() jest stosowana do ciągu s z jednym argumentem "e" .
Metoda find() przeszukuje podciąg podany jako argument w ciągu, do którego jest wywoływany. Funkcja zwraca indeks pierwszego wystąpienia podłańcucha. Jeśli podłańcuch nie zostanie znaleziony, metoda zwraca -1.
s = 'Hello'
print(s.find('e'))
# 1
print(s.find('ll'))
# 2
print(s.find('L'))
# -1
Podobnie metoda rfind() zwraca indeks ostatniego wystąpienia podłańcucha.
s = 'abracadabra'
print(s.find('b'))
# 1
print(s.rfind('b'))
# 8
Jeśli wywołasz find() z trzema argumentami s.find(substring, left, right) , wyszukiwanie odbywa się wewnątrz plasterka s[left:right] . Jeśli podasz tylko dwa argumenty, jak s.find(substring, left) , wyszukiwanie jest wykonywane w plasterka s[left:] , czyli począwszy od znaku o indeksie left do końca łańcucha. Metoda s.find(substring, left, right) zwraca indeks bezwzględny w stosunku do całego łańcucha s , a nie do segmentu.
s = 'my name is bond, james bond, okay?'
print(s.find('bond'))
# 11
print(s.find('bond', 12))
# 23
7. Metody ciągów: replace ()
Metoda replace() zastępuje wszystkie wystąpienia danego podłańcucha innym. Składnia: s.replace(old, new) pobiera ciąg S i zastępuje wszystkie wystąpienia podłańcucha old podłańcuchem new . Przykład:
print('a bar is a bar, essentially'.replace('bar', 'pub'))
# "pub to pub, zasadniczo"
Trzecią count argumentów można przekazać w następujący sposób: s.replace(old, new, count) . To sprawia, że replace() zastępuje tylko wystąpienia pierwszego count a następnie zatrzymuje się.
print('a bar is a bar, essentially'.replace('bar', 'pub', 1))
# "pub to bar, w zasadzie"
8. Metody ciągów: count ()
Ta metoda zlicza liczbę wystąpień jednego ciągu w innym ciągu. Najprostsza forma to ta: s.count(substring) . Uwzględniane są tylko niepokrywające się zdarzenia:
print('Abracadabra'.count('a'))
# 4
print(('aaaaaaaaaa').count('aa'))
# 5
Jeśli podasz trzy parametry: , liczenie jest wykonywane wewnątrz plasterka s[left:right] .