Som v Pythone celkom nováčik a som úplne zmätený z metódy .join()
, o ktorej som sa dočítal, že je preferovanou metódou na spájanie reťazcov.
Skúsil som:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring().join(strid)
a dostal som niečo ako:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
Prečo to takto funguje? Nemalo by sa jednoducho automaticky pridať 595
?
Pozorne sa pozrite na svoj výstup:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^ ^ ^
Zvýraznil som "5", "9", "5" vášho pôvodného reťazca. Pythonovská metóda join()
je reťazcová metóda a preberá súpis vecí, ktoré sa majú spojiť s reťazcom. Jednoduchší príklad by mohol pomôcť pri vysvetlení:
>>> ",".join(["a", "b", "c"])
'a,b,c'
Medzi každý prvok daného zoznamu sa vloží znak ",". Vo vašom prípade je "zoznam" reprezentáciou reťazca "595", ktorý sa považuje za zoznam ["5", "9", "5"].
Zdá sa, že namiesto toho hľadáte +
:
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
join
prijíma ako argument iterovateľnú vec. Zvyčajne je to zoznam. Problémom vo vašom prípade je, že reťazec je sám o sebe iterovateľný, pričom vydáva postupne každý znak. Váš kód sa rozpadá na toto:
"wlfgALGbXOahekxSs".join("595")
ktorý sa správa rovnako ako tento:
"wlfgALGbXOahekxSs".join(["5", "9", "5"])
a vytvorí tak váš reťazec:
"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"
Reťazce ako iterable sú jednou z najzamotanejších počiatočných otázok jazyka Python.