Metody ciągów w języku Python
Metody ciągów są jednym z najpopularniejszych typów metod w języku Python. Często trzeba manipulować ciągami w celu wyodrębnienia informacji lub dopasowania do określonego formatu. Język Python zawiera kilka metod ciągów, które są przeznaczone do wykonywania najbardziej typowych i przydatnych przekształceń.
Metody ciągów są częścią str
typu, co oznacza, że metody istnieją jako zmienne ciągu lub część ciągu bezpośrednio. Na przykład metoda .title()
zwraca ciąg w początkowych limitach i może być używana bezpośrednio z ciągiem:
print("temperatures and facts about the moon".title())
Wyjście: Temperatures And Facts About The Moon
To samo zachowanie i użycie odbywa się w zmiennej:
heading = "temperatures and facts about the moon"
heading_upper = heading.title()
print(heading_upper)
Dzielenie ciągu
Typową metodą ciągu jest .split()
. Bez argumentów metoda oddziela ciąg w każdym miejscu. Jeśli używasz metody w ten sposób, należy utworzyć listę każdego słowa lub liczby oddzielonej spacją:
temperatures = "Daylight: 260 F Nighttime: -280 F"
temperatures_list = temperatures.split()
print(temperatures_list)
Wyjście: ['Daylight:', '260', 'F', 'Nighttime:', '-280', 'F']
W tym przykładzie masz do czynienia z wieloma wierszami, więc (niejawny) znak nowego wiersza może służyć do dzielenia ciągu na końcu każdego wiersza, tworząc pojedyncze wiersze:
temperatures = "Daylight: 260 F\n Nighttime: -280 F"
temperatures_list = temperatures.split('\n')
print(temperatures_list)
Wyjście: ['Daylight: 260 F', 'Nighttime: -280 F']
Ten typ dzielenia staje się przydatny, gdy potrzebujesz pętli do przetwarzania lub wyodrębniania informacji albo ładowania danych z pliku tekstowego.
Wyszukiwanie ciągu
Niektóre metody ciągów mogą szukać zawartości przed przetworzeniem bez użycia pętli. Załóżmy, że masz dwa zdania, które omawiają temperatury na różnych planetach i księżycach. Interesuje Cię jednak tylko temperatura związana z naszym Księżycem. Oznacza to, że jeśli zdania nie mówią o Księżycu, nie powinny być przetwarzane w celu wyodrębnienia informacji.
Najprostszym sposobem wykrycia, czy dany wyraz, znak lub grupa znaków istnieje w ciągu, jest użycie in
operatora :
print("Moon" in "This text will describe facts and challenges with space travel")
Wyjście: False
print("Moon" in "This text will describe facts about the Moon")
Wyjście: True
Podejściem do znajdowania pozycji określonego wyrazu w ciągu jest użycie .find()
metody :
temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Moon"))
Wyjście: -1
Metoda .find()
zwraca wartość -1
, gdy wyraz nie zostanie znaleziony lub zwraca indeks (liczbę reprezentującą miejsce w ciągu). W poniższym przykładzie pokazano, jak będzie się zachowywać, jeśli szukasz słowa Mars:
temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Mars"))
Wyjście: 64
64
to pozycja, w której "Mars"
pojawia się ciąg.
Innym sposobem wyszukiwania zawartości jest użycie .count()
metody , która zwraca łączną liczbę wystąpień określonego słowa w ciągu:
temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.count("Mars"))
print(temperatures.count("Moon"))
1
0
Ciągi w języku Python są wrażliwe na wielkość liter, co oznacza, że Księżyc i Księżyc są traktowane jako różne wyrazy. Aby wykonać porównanie bez uwzględniania wielkości liter, można przekonwertować ciąg na wszystkie małe litery przy użyciu .lower()
metody :
print("The Moon And The Earth".lower())
Wyjście: the moon and the earth
Podobnie jak metoda .lower()
, ciągi mają metodę .upper()
, która wykonuje odwrotnie, konwertując każdy znak na wielkie litery:
print("The Moon And The Earth".upper())
Wyjście: THE MOON AND THE EARTH
Napiwek
Podczas wyszukiwania i sprawdzania zawartości bardziej niezawodne podejście polega na małych literach ciągu, aby wielkość liter nie zapobiegała dopasowaniu. Jeśli na przykład zliczasz liczbę wyświetleń wyrazu, metoda nie będzie zliczać liczby wystąpień, mimo że oba te elementy są tym samym słowem. Możesz użyć .lower()
metody , aby zmienić wszystkie znaki na małe litery.
Sprawdzanie zawartości
Czasami przetwarzasz tekst w celu wyodrębnienia informacji, które są nieregularne w prezentacji. Na przykład następujący ciąg jest prostszy do przetworzenia niż akapit bez struktury:
temperatures = "Mars Average Temperature: -60 C"
Aby wyodrębnić średnią temperaturę na Marsie, można to zrobić przy użyciu następujących metod:
temperatures = "Mars Average Temperature: -60 C"
parts = temperatures.split(':')
print(parts)
print(parts[-1])
['Mars average temperature', ' -60 C']
' -60 C'
Powyższy kod ufa, że wszystko po dwukropku (:
) jest temperaturą. Ciąg jest podzielony na :
, co powoduje utworzenie listy dwóch elementów. Użycie [-1]
na liście zwraca ostatni element, który jest temperaturą w tym przykładzie.
Jeśli tekst jest nieregularny, nie można użyć tych samych metod dzielenia, aby uzyskać wartość. Musisz przepętlić elementy i sprawdzić, czy wartości są określonego typu. Język Python zawiera metody, które ułatwiają sprawdzenie typu ciągu:
mars_temperature = "The highest temperature on Mars is about 30 C"
for item in mars_temperature.split():
if item.isnumeric():
print(item)
Wyjście: 30
Podobnie jak metoda .isnumeric()
, .isdecimal()
można sprawdzić ciągi, które wyglądają jak dziesiętne.
Ważne
Może być zaskakujące, aby dowiedzieć się, że "-70".isnumeric()
zwróci False
wartość . Dzieje się tak, ponieważ wszystkie znaki w ciągu muszą być numeryczne, a kreska (-
) nie jest numeryczna. Jeśli musisz sprawdzić liczby ujemne w ciągu, .isnumeric()
metoda nie będzie działać.
Istnieją dodatkowe walidacje, które można zastosować w ciągach w celu sprawdzenia wartości. W przypadku liczb ujemnych kreska jest poprzedzona liczbą i może zostać wykryta za pomocą .startswith()
metody :
print("-60".startswith('-'))
Wyjście: True
.endswith()
Podobnie metoda pomaga zweryfikować ostatni znak ciągu:
if "30 C".endswith("C"):
print("This temperature is in Celsius")
Wyjście: This temperature is in Celsius
Przekształcanie tekstu
Istnieją inne metody, które pomagają w sytuacjach, w których tekst musi zostać przekształcony w coś innego. Do tej pory przedstawiono ciągi, które mogą używać języka C dla stopni Celsjusza i F dla Fahrenheita. Za pomocą .replace()
metody można znaleźć i zastąpić wystąpienia znaku lub grupy znaków:
print("Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius.".replace("Celsius", "C"))
Wyjście: Saturn has a daytime temperature of -170 degrees C, while Mars has -28 C.
Jak wspomniano wcześniej, .lower()
jest dobrym sposobem normalizacji tekstu w celu przeprowadzenia wyszukiwania bez uwzględniania wielkości liter. Szybko sprawdźmy, czy niektóre teksty omawiają temperatury:
text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text)
Wyjście: False
text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text.lower())
Wyjście: True
Może nie być konieczne przeprowadzenie weryfikacji bez uwzględniania wielkości liter przez cały czas, ale małe litery są dobrym podejściem, gdy tekst używa mieszanej wielkości liter.
Po podzieleniu tekstu i wykonaniu przekształceń może być konieczne ponowne sprzężenie części. Podobnie jak .split()
metoda może oddzielić znaki, .join()
metoda może połączyć je z powrotem.
Metoda .join()
wymaga iterowalnej (takiej jak lista języka Python) jako argumentu, więc jej użycie różni się od innych metod ciągów:
moon_facts = ["The Moon is drifting away from the Earth.", "On average, the Moon is moving about 4cm every year."]
print(' '.join(moon_facts))
Wyjście: The Moon is drifting away from the Earth. On average, the Moon is moving about 4cm every year.
W tym przykładzie ' '
jest używany do łączenia każdego elementu na liście.