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)
mNie podano opisu zmian
Piotr (dyskusja | edycje)
mNie podano opisu zmian
Linia 1:
{{Podświetl|py}}
== Łączenie listlisty i dzielenie łańcuchów znaków ==
 
Mamy listę, której elementy przedstawione są w formie <tt>klucz=wartość</tt>. Załóżmy, że chcielibyśmy połączyć je wszystkie w pojedynczy łańcuch. Aby to zrobić, wykorzystamy metodę '''<tt>join'''</tt> obiektu typu string.
 
Poniżej został przedstawiony przykład łączenia list wykorzystany w funkcji '''buildConnectionString''':
 
Poniżej został przedstawiony przykład łączenia listlisty, wykorzystanyktóry wykorzystaliśmy w funkcji '''<tt>buildConnectionString'''</tt>:
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
 
Zanim przejdziemy dalej poruszmyzastanówmy jednąsię interesującąnad pewną kwestię. Funkcje są obiektami, łańcuchy znaków są obiektami... wszystko jest obiektem. MoglibyścieMogłeś dojść do wniosku, że także'''zmienna''' zmienne (np. przechowujące łańcuch znaków)jestobiektami.obiektem, Jednak takco nie jest prawdą. Spójrz na ten przykład i zauważ, że łańcuch znaków ";" sam w sobie jest obiektem, więc możnai z niego można wywołać metodę '''<tt>join'''</tt>.
 
Metoda '''<tt>join'''</tt> łączy elementy listy w jeden łańcuch znaków, a każdy element jest oddzielony od innego poprzez znak średnika. Separator nie musi być średnikiem, nie musi być nawet pojedynczym znakiem. Może być dowolnym łańcuchem znaków.
 
{{Uwaga|1=Metoda '''<tt>join'''</tt> pracuje tylko z listami przechowującymi łańcuchy znaków;. nieNie używakorzysta ona z żadnych wymuszeń, czy konwersji. PrzyłączanieŁączenie listy, która posiada co najmniej jeden lub więcej elementów niebędących łańcuchem znaków, będzie generowałowyrzuci wyjątek.}}
{{Uwaga|
1=Metoda '''join''' pracuje tylko z listami przechowującymi łańcuchy znaków; nie używa ona żadnych wymuszeń, konwersji. Przyłączanie listy, która posiada co najmniej jeden lub więcej elementów niebędących łańcuchem znaków, będzie generowało wyjątek.}}
 
''' Przykład 3.27. Wyjście <tt class="lang-none">odbchelper.py </tt>'''
 
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
Linia 22 ⟶ 21:
'server=mpilgrim;uid=sa;database=master;pwd=secret'
 
Powyższy łańcuch znaków otrzymaliśmy podczas uruchamiania <tt>odbchelper.py</tt>.
Ten łańcuch znaków zostanie zwrócony z funkcji '''buildConnectionString''' i pokazany poprzez blok instrukcji, dzięki czemu mogliśmy otrzymać wyjście w konsoli w postaci tego napisu.
 
W Pythonie znajdziemy także analogiczną metodędo metody <tt>join</tt>, która zamiast łączyć, dzieli łańcuch znaków na listę. NosiJest onato nazwęfunkcja '''<tt>split'''</tt>.
 
''' Przykład 3.28. Dzielenie łańcuchów znaków '''
Linia 37 ⟶ 36:
['server=mpilgrim', 'uid=sa;database=master;pwd=secret']
 
# '''<tt>split'''</tt>, przeciwieństwo funkcji '''<tt>join'''</tt>, 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.
# doDo funkcji '''<tt>split'''</tt> 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/Poczuj moc|następnym rozdziale]].)
 
tekst='''{{Infobox|<tt>tekst.split(separator, 1)'''</tt> jest przydatną technikąinstrukcją, która polegadzieli na podzieleniu łańcuchałańcuch na dwa fragmenty:.
pierwszyPierwszy znajdującyfragment dotyczy tekstu znajdującego się przed pierwszym wystąpieniem separatora (jest on w pierwszym elemencieelementem zwracanej listy), a i drugi zawierającyfragment zawiera dalszy fragment tekstu, znajdujący się za pierwszym znalezionym separatorem (wjest drugim elemencieelementem listy). NastępnieDalsze kiedyseparatory mamynie te dwabrane fragmenty,pod wykonujemy na nich pewne operacje)uwagę.}}
 
===== Materiały dodatkowe =====
{{Infobox|
* [http://www.faqts.com/knowledge-base/index.phtml/fid/199/ Python Knowledge Base] odpowiada na [http://www.faqts.com/knowledge-base/index.phtml/fid/480 często zadawane pytania dotyczące łańcuchów znaków], a także posiada [http://www.faqts.com/knowledge-base/index.phtml/fid/539 wiele przykładów wykorzystywania łańcuchów znaków].
tekst='''tekst.split(separator, 1)''' jest przydatną techniką, która polega na podzieleniu łańcucha na dwa fragmenty:
* [http://www.python.org/doc/current/lib/ Python Library Reference] wymienia [http://www.python.org/doc/current/lib/string-methods.html wszystkie metody łańcuchów znaków].
pierwszy znajdujący się przed pierwszym wystąpieniem separatora (jest on w pierwszym elemencie zwracanej listy) i drugi zawierający dalszy fragment tekstu, znajdujący się za separatorem (w drugim elemencie). Następnie kiedy mamy te dwa fragmenty, wykonujemy na nich pewne operacje).}}
* [http://www.python.org/doc/FAQ.html The Whole Python FAQ] wyjaśnia, dlaczego <tt>join</tt> jest [http://www.python.org/cgi-bin/faqw.py?query=4.96&querytype=simple&casefold=yes&req=search metodą łańcucha znaków] zamiast listy.
 
<noinclude>