# 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.

```Python
original_string = "Hello, Python#"
 
modified_string = original_string.replace('#', '!')
print(original_string)  # Output: Hello, Python#
print(modified_string)  # Output: Hello, 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 nadomestite z drugimi znaki.

```Python
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!
```

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 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()`

```Python
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
```

Redni 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()`

```Python
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
```

V 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()`

```Python
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
```

Metoda `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()`

```Python
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
```

S `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()`

```Python
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
```

Funkcija `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()`

```Python
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******
```

Metodo `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.

```Python
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.
```

V 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`.

Tip Pri filtriranju nizov lahko uporabite indeks niza Python, da filtrirate znake na določenih mestih. Če želite oblikovati nize na določen način, si oglejte naš članek o oblikah nizov Python.


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/odstranjevanje-znakov-iz-nizov-v-pythonu/](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/odstranjevanje-znakov-iz-nizov-v-pythonu/) for AI/LLM consumption.