Strings - Learn Python 3 - Snakify

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)  # &gt; _ &lt;&gt; _ &lt;&gt; _ &lt;&gt; _ &lt;&gt; _ &lt;

Ł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
Advertising by Google, may be based on your interests

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 S = 'Hello' , S[0] == 'H' , S[1] == 'e' , S[2] == 'l' , S[3] == 'l' , S[4] == 'o' . 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, S[-1] == 'o' , S[-2] == 'l' , S[-3] == 'l' , S[-4] == 'e' , S[-5] == 'H' .

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 .

Advertising by Google, may be based on your interests

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

Advertising by Google, may be based on your interests

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 &quot;ll&quot;
print(s)  # wyświetla &quot;Hello&quot;, ponieważ s nie jest zmieniane
print(t)  # drukuje &quot;ll&quot;
Advertising by Google, may be based on your interests

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])
Zwróć uwagę, że trzeci parametr wycinka jest podobny do trzeciego parametru w zakresie funkcji range() :
s = 'abcdefghijklm'
print(s[0:10:2])
for i in range(0, 10, 2):
    print(i, s[i])
Advertising by Google, may be based on your interests

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
Advertising by Google, may be based on your interests

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'))
# &quot;pub to pub, zasadniczo&quot;

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))
# &quot;pub to bar, w zasadzie&quot;
Advertising by Google, may be based on your interests

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: s.count(substring, left, right) , liczenie jest wykonywane wewnątrz plasterka s[left:right] .

Advertising by Google, may be based on your interests