Zanurkuj w Pythonie/Łączenie list i dzielenie łańcuchów znaków
Łączenie listy i dzielenie łańcuchów znaków
[edytuj]Mamy listę, której elementy są w formie klucz=wartość
. Załóżmy, że chcielibyśmy połączyć je wszystkie w pojedynczy łańcuch. Aby to zrobić, wykorzystamy metodę join
obiektu typu string.
Poniżej został przedstawiony przykład łączenia listy w łańcuch znaków, który wykorzystaliśmy w funkcji buildConnectionString
:
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
Zanim przejdziemy dalej zastanówmy się nad pewną kwestią. Funkcje są obiektami, łańcuchy znaków są obiektami... wszystko jest obiektem. Można by było dojść do wniosku, że także zmienna jest obiektem, ale to akurat nie jest prawdą. Spójrzmy na ten przykład i zauważmy, że łańcuch znaków ";"
sam w sobie jest obiektem i z niego można wywołać metodę join
. Zmienne są etykietami (nazwami) dla obiektów.
Metoda join
łączy elementy listy w jeden łańcuch znaków, a każdy element w zwracanym łańcuchu jest oddzielony od innego separatorem. W naszym przykładzie jest nim ";"
, lecz może nim być dowolny łańcuch znaków.
Uwaga!
|
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> ["%s=%s" % (k, v) for k, v in params.items()]
['pwd=secret', 'database=master', 'uid=sa', 'server=mpilgrim']
>>> ";".join(["%s=%s" % (k, v) for k, v in params.items()])
'pwd=secret;database=master;uid=sa;server=mpilgrim'
Powyższy łańcuch znaków otrzymaliśmy podczas uruchamiania odbchelper.py.
W Pythonie znajdziemy także metodę analogiczną do metody join
, ale która zamiast łączyć, dzieli łańcuch znaków na listę. Jest to funkcja split
.
>>> li = ['pwd=secret', 'database=master', 'uid=sa', 'server=mpilgrim'] >>> s = ";".join(li) >>> s 'pwd=secret;database=master;uid=sa;server=mpilgrim' >>> s.split(";") #(1) ['pwd=secret', 'database=master', 'uid=sa', 'server=mpilgrim'] >>> s.split(";", 1) #(2) ['pwd=secret', 'database=master;uid=sa;server=mpilgrim']
split
, przeciwieństwo funkcjijoin
, dzieli łańcuch znaków na wieloelementową listę. Separator (w przykładzie";"
) nie będzie występował w żadnym elemencie zwracanej listy, zostanie pominięty.- Do funkcji
split
możemy dodać opcjonalny drugi argument, który określa, na jaką maksymalną liczbę kawałków ma zostać podzielony łańcuch. (O opcjonalnych argumentach w funkcji dowiemy się w następnym rozdziale.)
tekst.split(separator, 1) jest przydatnym sposobem dzielenia łańcucha na dwa fragmenty.
Pierwszy fragment dotyczy łańcucha znajdującego się przed pierwszym wystąpieniem separatora (jest on pierwszym elementem zwracanej listy), a drugi fragment zawiera dalszy fragment łańcucha znajdującego się za pierwszym znalezionym separatorem (jest drugim elementem listy). Dalsze separatory nie są brane pod uwagę. |
Materiały dodatkowe
[edytuj]- Python Knowledge Base odpowiada na często zadawane pytania dotyczące łańcuchów znaków, a także posiada wiele przykładów wykorzystywania łańcuchów znaków.
- Python Library Reference wymienia wszystkie metody łańcuchów znaków.
- The Whole Python FAQ wyjaśnia, dlaczego join jest metodą łańcucha znaków zamiast listy.