Tieto metódy mi nešli do hlavy, preto som to tu trocha ináč rozpísal.
Metóda translate() veľmi podobná metóde replace(), veľký rozdiel je ale ako pracuje. Na pozadí totiž pracuje s Unicode reprezentáciou znakov. Nie všetko je totiž možné s metódou replace(). Ak by ste potrebovali zo stringu „111000“ vytvoriť „000111“, keď sa zamyslíte for cyklom a metódou replace to nie je možné.
Podľa dokumentácie sa str.translate(table)
metóda vráti
„kópia reťazca, v ktorom bol každý znak namapovaný prostredníctvom danej prekladovej tabuľky.“
Tu uvedená prekladová tabuľka je jediným argumentom, ktorý metóda str.translate
akceptuje.
Aby sme pochopili nasledujúce slovníky, treba poznať ako štandart UNICODE reprezentuje jednotlivé znaky, na to nám pomáhajú funkcie chr() a ord():chr
vezme celé číslo a vráti znak, ktorý toto celé číslo predstavuje, pričom ord
vezme znak a vráti celé číslo zodpovedajúce jeho bodu v kóde Unicode.
>>> ord("a")
97
>>> chr(97)
'a'
>>> ord("a"), ord("b"), ord("c")
(97, 98, 99)
>>> ord("A")
65
>>> "aaa bbb ccc".translate({97: 65, 98: "BBB", 99: None})
'AAA BBBBBBBBB '
>>>
Všimnite si, že vyššie uvedená metóda str.translate
dostala slovník s 3 kľúčmi:
97
(bod kódu pre"a"
) mapovaný na65
(bod kódu pre"A"
);98
(kódový bod pre"b"
) mapovaný na"BBB"
; a99
(bod kódu pre"c"
) namapovaný naNone
.
V konečnom výsledku vidíme, že všetky malé písmená „A“ boli nahradené veľkými písmenami „A“, malé písmená „B“ boli nahradené trojitým „BBB“ (až do takej miery, že sme začali tromi „B“ „s a posledný reťazec má deväť „B“) a malé písmená „C“ boli odstránené.
Poďme sa pozrieť ako je to v spojení translate a maketrans. Vyskúšajme zameniť už spomínané jednotky a nuly:
>>> "001011010101001".translate({ord("0"): "1", ord("1"): "0"})
'110100101010110'
Tento zápis nie je najkrajší,…
>>> "001011010101001".translate(str.maketrans({"0": "1", "1": "0"}))
'110100101010110'
Toto bola ukážka s jedným parametrom.
Takto to vyzerá s dvoma argumentami:
>>> a="Hello World"
>>> a.translate(str.maketrans("Helo", "xipe"))
'xippe Werpd'
>>>
Nakoniec, tretí argument to str.translate
je jednoducho reťazec všetkých znakov, ktoré by mali byť namapované, None
alebo inými slovami, ktoré by mali byť z reťazca úplne odstránené.
>>> a="Hello World"
>>> a.translate(str.maketrans("Helo", "xipe", "d"))
'xippe Werp'
>>>
Dúfam že vám je to už trochu jasnejšie, na čo sú tieto metódy… (pri 99% to replace() istí)