Zanurkuj w Pythonie/Łączenie list i dzielenie łańcuchów znaków: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
Piotr (dyskusja | edycje)
mNie podano opisu zmian
Linia 1:
{{Podświetl|py}}
== Łączenie listy i dzielenie łańcuchów znaków ==
 
Mamy listę, której elementy są w formie <ttcode>klucz=wartość</ttcpde>. Załóżmy, że chcielibyśmy połączyć je wszystkie w pojedynczy łańcuch. Aby to zrobić, wykorzystamy metodę <ttcode>join</ttcode> obiektu typu string.
 
Poniżej został przedstawiony przykład łączenia listy w łańcuch znaków, który wykorzystaliśmy w funkcji <ttcode>buildConnectionString</ttcode>:
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. MogłeśMożna by było dojść do wniosku, że 'także ''zmienna''' jest obiektem, coale to akurat nie jest prawdą. SpójrzSpójrzmy na ten przykład i zauważzauważmy, że łańcuch znaków <code>";"</code> sam w sobie jest obiektem i z niego można wywołać metodę <ttcode>join</ttcode>. Zmienne są etykietami dla obiektów.
 
Metoda <code>join</code> łą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 <code>";"</code>, lecz może nim być dowolny łańcuch znaków.
 
{{Uwaga|1=Metoda <ttcode>join</ttcode> pracujedziała tylko z listami przechowującymi łańcuchy znaków. Nie korzysta ona z żadnych wymuszeń czy konwersji. Łączenie listy, która posiada co najmniej jeden lub więcej elementów niebędących łańcuchem znaków, wyrzuci wyjątek.
}}
 
'''Przykład 3.27. Wyjście <tt class="lang-none">odbchelper.py</tt>'''
 
{{Python/Przykład
|3.27|Wyjście {{Python/Src|odbchelper.py}}
|tekst=
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> ["%s=%s" % (k, v) for k, v in params.items()]
{{samp|['serverpwd=mpilgrimsecret', 'uiddatabase=samaster', 'databaseuid=mastersa', 'pwdserver=secretmpilgrim']}}
>>> ";".join(["%s=%s" % (k, v) for k, v in params.items()])
{{samp|'serverpwd=mpilgrim;uid=sasecret;database=master;pwduid=secretsa;server=mpilgrim'}}
}}
 
Powyższy łańcuch znaków otrzymaliśmy podczas uruchamiania <tt>{{Python/Src|odbchelper.py</tt>}}.
 
W Pythonie znajdziemy także metodę analogiczną do metody <ttcode>join</ttcode>, ale która zamiast łączyć, dzieli łańcuch znaków na listę. Jest to funkcja <ttcode>split</ttcode>.
 
''' {{Python/Przykład
|3.28. |Dzielenie łańcuchów znaków '''
|tekst=
 
>>> li = ['serverpwd=mpilgrimsecret', 'uiddatabase=samaster', 'databaseuid=mastersa', 'pwdserver=secretmpilgrim']
>>> s = ";".join(li)
>>> s
{{samp|'serverpwd=mpilgrim;uid=sasecret;database=master;pwduid=secretsa;server=mpilgrim'}}
>>> s.split(";") #(1)
[{{samp|'serverpwd=mpilgrimsecret', 'uiddatabase=samaster', 'databaseuid=mastersa', 'pwdserver=secretmpilgrim']}}
>>> s.split(";", 1) #(2)
{{samp|['serverpwd=mpilgrimsecret', 'uid=sa;database=master;pwduid=secretsa;server=mpilgrim']}}
 
# <ttcode>split</ttcode>, przeciwieństwo funkcji <ttcode>join</ttcode>, dzieli łańcuch znaków na wieloelementową listę. Separator (w przykładzie <code>";"</code>) nie będzie występował w żadnym elemencie zwracanej listy, zostanie pominięty.
# Do funkcji <ttcode>split</ttcode> 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 [[Python../PoczujPotęga mocintrospekcji|następnym rozdziale]].)
 
{{Infobox|<ttcode>tekst.split(separator, 1)</ttcode> jest przydatnym sposobem dzielenia łańcucha na dwa fragmenty.
Pierwszy fragment dotyczy tekstułańcucha znajdującego się przed pierwszym wystąpieniem separatora (jest on pierwszym elementem zwracanej listy), a drugi fragment zawiera dalszy fragment tekstu,łańcucha znajdującyznajdującego się za pierwszym znalezionym separatorem (jest drugim elementem listy). Dalsze separatory nie są brane pod uwagę.
}}
 
===== Materiały dodatkowe =====
Linia 49 ⟶ 54:
<noinclude>
{{Nawigacja|Python|
[[Python../Odwzorowywanie listy|Odwzorowywanie listy/]]|
[[Python../Wbudowane typy danych - podsumowanie|Podsumowanie]]|
}}
{{Podświetl|py}}
</noinclude>