Przejdź do zawartości

Zanurkuj w Pythonie/Łączenie list i dzielenie łańcuchów znaków

Z Wikibooks, biblioteki wolnych podręcznikó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.

Przykład. Wyjście odbchelper.py
>>> 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.

Przykład. Dzielenie łańcuchów znaków
>>> 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']
  1. split, przeciwieństwo funkcji join, 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.
  2. 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.)

Materiały dodatkowe

[edytuj]