Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!

Zmienne typu "string" będąc tak naprawdę obiektami klasy string posiadają wbudowane funkcje, pozwalające nam na wykonywanie na tych zmiennych różnorakich operacji.
W poniższym zestawieniu prezentuję tylko wybrane funkcje wbudowane, te które uznałem za użyteczne. Pełniejsze zestawienie można znaleźć na przykład tu: https://www.w3schools.com/python/python_ref_string.asp
Funkcja upper powiększa ciąg znaków:
napis="ministerstwo do spraw niezbyt istotnych spraw"
print(napis.upper())
powyższy kod wydrukuje na konsoli tekst:
MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW
Zwróć uwagę, że funkcja upper zwraca powiększony ciąg znaków, a nie zmienia zawartości zmiennej napis!
Funcja lower pomniejsza ciąg znaków:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.lower())
Wynikiem działania tej funkcji będzie poniższy ciąg tekstowy na konsoli:
ministerstwo do spraw niezbyt istotnych spraw
Zwróć uwagę, że funkcja lower zwraca pomniejszony ciąg znaków, a nie zmienia zawartości zmiennej napis!
Funkcja title powiększa pierwsze litery wszystkich wyrazów w ciągu, a pomniejsza pozostałe litery.
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.title())
Powyższy kod wydrukuje na konsoli komunikat o takiej treści:
Ministerstwo Do Spraw Niezbyt Istotnych Spraw
Ta funkcja pozwala zamieniać wybrane znaki lub ciągi na inne:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.replace("I","X"))
W ten sposób wydrukujemy na konsoli to:
MXNXSTERSTWO DO SPRAW NXEZBYT XSTOTNYCH SPRAW
Funkcja len nie jest związana bezpośrednio z klasą string, nie jest funkcją wbudowaną. Jest jednak często wykorzystywana w odniesieniu do łańcuchów tekstu, dlatego tu się pojawia. Jeśli do funkcji len podamy ciąg tekstowy, zwróci nam ona ilość znaków zawartych w tym ciągu.
x=len("MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW")
print(x)
wyświetli nam na konsoli 45.
Count zlicza ilość wystąpień danego ciągu lub znaku w łańcuchu tekstowym:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.count('IS'))
Powyższy kod drukuje na konsoli liczbę 2, ponieważ tyle razy występuje w ciągu "IS". Uwaga - ta funkcja zwraca uwagę na wielkość liter!
Funkcja strip służy do usuwania białych (domyślnie bez parametru) lub wskazanych znaków lub ciągów.
napis=" MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW "
print(napis.strip())
Przykładowy kod wyświetli na konsoli napis pozbawiony na początku i na końcu spacji. Funkcja strip może też przyjąć argument:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.strip("MINI"))
W takim wypadku na konsoli zostanie wypisane:
STERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW
Ponieważ z początku (i ewentualnie z końca jeśli taki ciąg tam też występuje) napisu został usunięty ciąg podany jako parametr funkcji strip. Uwaga - ta funkcja zwraca uwagę na wielkość liter!
Funkcja split służy do dzielenia łańcuchów tekstowych na części i zwraca pod postacią listy wyrazów. Jeśli do funkcji split nie podamy argumentu, funkcja przyjmie że poszczególne wyrazy rozdzielane są spacją. Taki kod:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.split())
zwraca
['MINISTERSTWO', 'DO', 'SPRAW', 'NIEZBYT', 'ISTOTNYCH', 'SPRAW']
Być może widzisz taki format danych po raz pierwszy - to jest lista, rodzaj zbioru zmiennych w Pythonie. Ten typ będziemy jeszcze bardzo szczegółowo omawiać.
Funkcja split może także przyjąć argument, który będzie wskazywał czym poszczególne wyrazy są rozdzielane.
napis="MINISTERSTWO;DO;SPRAW;NIEZBYT;ISTOTNYCH;SPRAW"
print(napis.split(";"))
Powyższy przykład również wyświetli na konsoli ten sam zestaw co wcześniej, przy czym teraz wyrazy były rozdzielane średnikami.
['MINISTERSTWO', 'DO', 'SPRAW', 'NIEZBYT', 'ISTOTNYCH', 'SPRAW']
Ponieważ każda z funkcji łańcuchów tekstowych zwraca zmodyfikowany obiekt tej samej klasy (string), można wywoływać funkcje kaskadowo:
napis="MINISTERSTWO DO SPRAW NIEZBYT ISTOTNYCH SPRAW"
print(napis.strip("MINI").title().replace('i','X'))
Każda z tych funkcji będzie wywoływana na ciągu zwróconym przez poprzednią. Z napisu najpierw zostanie usunięte początkowe "MINI", następnie w zwróconym ciągu zostają powiększone pierwsze litery każdego wyrazu, by na końcu podmienić wszystkie małe i na duże X. Powyższy kod wyświetli na konsoli ciąg:
Sterstwo Do Spraw NXezbyt Istotnych Spraw
Po literach w łańcuchach tekstowych można iterować. Jest nawet specjalny rodzaj pętli który przechodzi po literach:
nazwa="Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch"
for n in nazwa:
print(n)
W wyniku działania tego kodu na konsoli zostaje wyświetlona każda z liter z ciągu w kolejnych liniach. "n" jest niejawnie deklarowaną w ramach pętli (i widoczną tylko w jej ramach) zmienną reprezentującą przy każdym obrocie pętli kolejną literę z ciągu. Ciekawostka - ten ciąg który przypisałem do zmiennej "nazwa", nie jest jak może się wydawać przypadkowym ciągiem znaków. To najdłuższa na świecie nazwa miejscowości. Mieści się ona w Walii.
kriszna= "rama "*5+" "+5*"hare "
print(kriszna)
Wygląda to tak, jakbyśmy mnożyli tekst razy liczbę, a to przecież nie możliwe. Chodzi jednak o co innego. Wydruk zmiennej kriszna wyrzuca na konsolę:
rama rama rama rama rama hare hare hare hare hare
....i teraz wszystko powinno być jasne. Mnożenie oznacza po prostu powtórzenie danej frazy n razy.
Czasem musimy sprawdzić czy gdzieś w tekście znajduje się jakiś znak lub fraza. Jest do tego bardzo wygodna konstrukcja:
if ("X" in "SpaceX"):
print("ten ciąg zawiera X!")
W miejsce X możesz podstawić też dowolną frazę. Ten sam efekt można osiągnąć na przykład wbudowaną funkcją count.
Tytuł tego podrozdziału to trochę trolling, ale w Pythonie faktycznie można to sprawdzić (z przewidywalnym skutkiem ;) ). Sprawdźmy zatem:
if("Python">"Java"):
print("to chyba jasne :) Tu jest miejsce na hejt: ...............")
else:
print("coś się spsuło...")
Z jakiegoś powodu ten kod wyświetlił na konsoli komunikat:
to chyba jasne :) Tu jest miejsce na hejt: ...............
I to wcale nie jest jakiś żart twórców Pythona. To jest po prostu sprawdzenie czy fraza "Python" znalazłaby się po frazie "Java" gdyby ułożyć je alfabetycznie.
Z łańcuchów stosunkowo łatwo jest wycinać fragmenty na podstawie pozycji znaków. Zaczniemy od wycięcia pojedynczego znaku:
lancuch="123456789"
print(lancuch[2]
Zadeklarowałem łańcuch "łańcuch". Dla wygody umieściłem w nim kolejne cyfry, by można było szybko weryfikować działanie wycinania. Wszystkie kolejne przykłady w tym podrozdziale będę opierał na tej samej zmiennej. Korzystając z nawiasów kwadratowych, podając między nimi liczbę mogę pobrać pojedynczy znak z wskazanej pozycji. Pisząc [2] nie wyciągam jednak znaku z drugiej, a z trzeciej pozycji. Pamiętać należy o tym że w Pythonie liczymy od zera.
W ten sam sposób możemy podawać pozycję od końca.
print(lancuch[-2])
Taki zapis będzie oznaczał pobranie drugiego znaku od końca. W naszym przypadku będzie to 8.
print(lancuch[2:5])
Powyższy przykład wycina znaki "345". To jest wycinanie na zasadzie - od pozycji do pozycji. Tutaj obowiązuje ta sama zasada niedomkniętego z prawej strony zbioru jak w przypadku funkcji range.
W taki sposób:
print(lancuch[:5])
wytniemy początek łańcucha - do piątej (czyli szóstej) pozycji bez niej samej, czyli w tym przypadku będzie to "12345" Możemy też podawać pozycję od końca. Poniższy kod wytnie ciąg "123456", czyli bez ostatnich trzech pozycji.
print(lancuch[:-3])
Możliwe jest też też przeskakiwanie co któryś znak. W poniższym przykładzie z ciągu wyciętego od pierwszej do siódmej pozycji wycinam co drugi znak. Uruchomienie tego kodu spowoduje wyświetlenie ciągu "135":
print(lancuch[0:6:2])
Gdybyśmy chcieli wyciąć z całego tekstu co drugi znak, moglibyśmy to zrobić w sposób mało czytelny:
print(lancuch[0:len(lancuch):2])
Albo nieco bardziej przaśny:
print(lancuch[::2])
Częstym zadaniem jest odcięcie z tekstu stałego początku lub końca - na przykład przedrostka "https://" albo rozszerzenia pliku. Do Pythona 3.9 robiło się to zwykle metodą "replace" albo cięciem po znakach, co bywało zawodne. Od 3.9 mamy dwie precyzyjne metody: "removeprefix" i "removesuffix":
adres = 'https://jsystems.pl'
print(adres.removeprefix('https://'))
plik = 'raport.csv'
print(plik.removesuffix('.csv'))
jsystems.pl
raport
W odróżnieniu od "replace" te metody usuwają tekst tylko wtedy, gdy faktycznie znajduje się on na początku (removeprefix) lub na końcu (removesuffix). Jeśli podanego przedrostka nie ma, tekst wraca bez zmian - nie ma ryzyka, że wytniemy coś przypadkiem ze środka.
Przy szukaniu błędów w kodzie często wypisujemy nazwę zmiennej i jej wartość. Od Pythona 3.8 można to skrócić - wystarczy w f-stringu dopisać znak "=" tuż za nazwą zmiennej, a Python sam wypisze i nazwę, i wartość:
x = 42
nazwa = 'żaba'
print(f'{x=}')
print(f'{nazwa=}')
x=42
nazwa='żaba'
To drobiazg, ale przy diagnostyce kodu oszczędza dużo pisania i pilnuje, żeby etykieta zawsze zgadzała się z nazwą zmiennej.
Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.
Szkolenie Python od podstaw, przez analizę danych, do machine learning
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...