Čeprav so nizi v Pythonu ne­spre­men­lji­vi, lahko na podlagi ob­sto­je­čih nizov ustvarite nove. Z raz­lič­ni­mi metodami lahko od­stra­ni­te ali zamenjate znake, da ustvarite želeni niz.

Kaj pomeni ne­spre­men­lji­vost?

Ne­spre­men­lji­vost pomeni, da ko je objekt enkrat ustvarjen, ga ni več mogoče spre­me­ni­ti. V Pythonu so nizi ne­spre­men­lji­vi. Ko iz niza od­stra­ni­te znake z uporabo metod v Pythonu, v bistvu ustvarite nov niz z do­lo­če­ni­mi elementi izvirnika. Izvirni niz pa ostane ne­spre­me­njen. Ne­spre­men­lji­vost nizov pomaga pri učin­ko­vi­tem upra­vlja­nju po­mnil­ni­ka in pre­pre­ču­je ne­pri­ča­ko­va­ne rezultate pri obdelavi nizov.

Kako od­stra­ni­ti in zamenjati posamezne znake ali niz znakov

Če želite iz niza od­stra­ni­ti določene znake, lahko uporabite str.replace() ali re.sub() z rednim izrazom, ki pred­sta­vlja znake ali vzorce, ki jih želite od­stra­ni­ti.

str.replace()

Funkcija str.replace() se uporablja za od­stra­nje­va­nje delov besedila in njihovo na­do­me­sti­tev s podnizom.

original_string = "Hello, Python#"
 
modified_string = original_string.replace('#', '!')
print(original_string)  # Output: Hello, Python#
print(modified_string)  # Output: Hello, Python!
Python

V 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 na­do­me­sti­te 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!
Python

Vzorec [@#$%^&*] 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 spre­men­ljiv­ko modified_string in ga izpisali.

Kako od­stra­ni­ti vse znake razen črk

Za od­stra­ni­tev vseh črk iz niza lahko uporabite različne metode. V na­da­lje­va­nju si bomo ogledali, kako to storiti z na­sle­dnji­mi 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: HelloWorld
Python

Redni izraz [^a-zA-Z] se ujema z vsakim znakom, ki ni mala ali velika črka. Po­sle­dič­no je modified_string se­sta­vljen samo iz črk iz izvirnega niza. Upo­šte­vaj­te, da se s tem od­stra­ni­jo 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: HelloWorld
Python

V tem primeru smo uporabili seznam ra­zu­me­va­nja, 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 igno­ri­ra­jo.

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: HelloWorld
Python

Metoda str.isalpha() vrne True, če je znak črka, sicer pa vrne False. Funkcija filter() ustvari filter objekt, ki vsebuje samo znake, ki iz­pol­nju­je­jo pogoj str.isalpha(). To nam omogoča, da od­stra­ni­mo vse znake v original_string, ki niso črke.

Kako od­stra­ni­ti vse znake razen številk

Kot v prejšnjih primerih lahko številke ločite z uporabo re.sub(), filter() in šte­vilč­nim ek­vi­va­len­tom 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: 123
Python

S 0-9 lahko opre­de­li­mo 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 na­do­me­sti­jo 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: 123
Python

Funkcija filter() v kom­bi­na­ci­ji 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******
Python

Metodo isdigit() lahko uporabimo tudi v seznamu ra­zu­me­va­nja, da ponovimo vsak char v original_string. Znakov, ki niso decimalne številke (not char.isdigit() je resnično), bomo na­do­me­sti­li z zvezdico *, sicer pa ostanejo enaki.

Kako od­stra­ni­ti znake z uporabo translate()

Metoda translate() je vgrajena funkcija v Pythonu, ki se uporablja za napredno zamenjavo znakov in pre­va­ja­nje 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.
Python

V zgornjem primeru smo za ustvar­ja­nje pre­va­jal­ne tabele uporabili kon­struk­tor str.maketrans() in dict.fromkeys(). To določa, da se vse sa­mo­gla­sni­ke nadomesti s *. Tabela se nato uporabi za izvirni niz, da dobimo modified_string.

Go to Main Menu