Kako odstraniti znak iz niza v Pythonu
Čeprav so nizi v Pythonu nespremenljivi, lahko na podlagi obstoječih nizov ustvarite nove. Z različnimi metodami lahko odstranite ali zamenjate znake, da ustvarite želeni niz.
Kaj pomeni nespremenljivost?
Nespremenljivost pomeni, da ko je objekt enkrat ustvarjen, ga ni več mogoče spremeniti. V Pythonu so nizi nespremenljivi. Ko iz niza odstranite znake z uporabo metod v Pythonu, v bistvu ustvarite nov niz z določenimi elementi izvirnika. Izvirni niz pa ostane nespremenjen. Nespremenljivost nizov pomaga pri učinkovitem upravljanju pomnilnika in preprečuje nepričakovane rezultate pri obdelavi nizov.
Kako odstraniti in zamenjati posamezne znake ali niz znakov
Če želite iz niza odstraniti določene znake, lahko uporabite str.replace() ali re.sub() z rednim izrazom, ki predstavlja znake ali vzorce, ki jih želite odstraniti.
str.replace()
Funkcija str.replace() se uporablja za odstranjevanje delov besedila in njihovo nadomestitev s podnizom.
original_string = "Hello, Python#"
modified_string = original_string.replace('#', '!')
print(original_string) # Output: Hello, Python#
print(modified_string) # Output: Hello, Python!PythonV zgornjem primeru metoda replace() zamenja znak „#“ v original_string z klicajem „!“.
re.sub()
Funkcija re.sub() pripada modulu re v Pythonu. S to funkcijo lahko iščete redne izraze v nizih in jih nadomestite z drugimi znaki.
import re
original_string = "Hello, World! @#$%^&*"
modified_string = re.sub(r'[@#$%^&*]', '', original_string)
print(original_string) # Output: Hello, World! @#$%^&*
print(modified_string) # Output: Hello, World!PythonVzorec [@#$%^&*] je redni izraz, ki se ujema s posebnimi znaki @, #, $, %, ^, &,*. Funkcija re.sub() poišče vse ujemanje vzorca v izvirnem nizu original_string in jih nadomesti s praznim nizom ''. V zgornjem primeru smo rezultat shranili v spremenljivko modified_string in ga izpisali.
Kako odstraniti vse znake razen črk
Za odstranitev vseh črk iz niza lahko uporabite različne metode. V nadaljevanju si bomo ogledali, kako to storiti z naslednjimi metodami: isalpha(), filter() in re.sub().
re.sub()
import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub(r'[^a-zA-Z]', '', original_string)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorldPythonRedni izraz [^a-zA-Z] se ujema z vsakim znakom, ki ni mala ali velika črka. Posledično je modified_string sestavljen samo iz črk iz izvirnega niza. Upoštevajte, da se s tem odstranijo tudi presledki med črkami.
isalpha()
original_string = "Hello, 123 World! @#$%^&*"
modified_string = ''.join(char for char in original_string if char.isalpha())
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorldPythonV tem primeru smo uporabili seznam razumevanja, da smo ponovili vsako črko v original_string. Metoda isalpha() preveri, ali je znak črka. Črke se nato vstavijo v novo modified_string, medtem ko se vsi drugi znaki ignorirajo.
filter()
original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isalpha, original_string)
modified_string = ''.join(filtered_chars)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorldPythonMetoda str.isalpha() vrne True, če je znak črka, sicer pa vrne False. Funkcija filter() ustvari filter objekt, ki vsebuje samo znake, ki izpolnjujejo pogoj str.isalpha(). To nam omogoča, da odstranimo vse znake v original_string, ki niso črke.
Kako odstraniti vse znake razen številk
Kot v prejšnjih primerih lahko številke ločite z uporabo re.sub(), filter() in številčnim ekvivalentom isalpha(), isdigit().
re.sub()
import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub('[^0-9]', '', original_string)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: 123PythonS 0-9 lahko opredelimo območje, ki zajema vse številke od 0 do 9. Pomišljaj - med 0 in 9 deluje kot operator območja. Predhodna ^ pomeni vse znake, ki niso v določenem območju od 0 do 9. Ti znaki se nadomestijo s praznimi znaki z uporabo re.sub.
filter()
original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isdigit, original_string)
modified_string = ''.join(filtered_chars)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: 123PythonFunkcija filter() v kombinaciji s isdigit() lahko iz niza filtrira številke in odstrani preostale znake. Če ju uporabimo skupaj, nam novi niz prikaže številke 123.
isdigit()
original_string = "Hello, 123 World"
modified_string = ''.join('*' if not char.isdigit() else char for char in original_string)
print(original_string) # Output: Hello, 123 World
print(modified_string) # Output: *******123******PythonMetodo isdigit() lahko uporabimo tudi v seznamu razumevanja, da ponovimo vsak char v original_string. Znakov, ki niso decimalne številke (not char.isdigit() je resnično), bomo nadomestili z zvezdico *, sicer pa ostanejo enaki.
Kako odstraniti znake z uporabo translate()
Metoda translate() je vgrajena funkcija v Pythonu, ki se uporablja za napredno zamenjavo znakov in prevajanje v nizih. Omogoča učinkovit način zamenjave znakov s pomočjo tabele prevodov.
original_string = "Hello, World! Remove vowels."
translation_table = str.maketrans(dict.fromkeys('aeiouAEIOU', '*'))
modified_string = original_string.translate(translation_table)
print(original_string) # Output: Hello, World! Remove vowels.
print(modified_string) # Output: H*ll*, W*rld! R*m*v* v*w*ls.PythonV zgornjem primeru smo za ustvarjanje prevajalne tabele uporabili konstruktor str.maketrans() in dict.fromkeys(). To določa, da se vse samoglasnike nadomesti s *. Tabela se nato uporabi za izvirni niz, da dobimo modified_string.