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]
.