Post on 04-Dec-2015
description
Povezanost stringova i listi
Pretvorba stringa u listu i liste stringova u jedan string
Pretvorba stringa u listu
Ugrađena funkcija list() – pretvara string u listu pojedinačnih znakova
Npr.
>>> s = 'Ovo je string!'
>>> s
'Ovo je string!'
>>> l = list(s)
>>> l
['O', 'v’, 'o', ' ', 'j', 'e', ' ', 's', 't', 'r', 'i', 'n', 'g', '!']
Pretvorba liste u string
metoda: sep.join(lista) - sep je string koji će biti postavljen kao separator između pojedinih elemenata liste kada one budu smještene u string
Ako, npr. stavimo da je separator jedan razmak, dobit ćemo jedan string u kojem će elementi liste (stringovi) biti razdvojeni razmakom:
Npr.
>>> l = ['Ovo', 'će', 'postati', 'rečenica.']
>>> s = ' '.join(l)
>>> s
'Ovo će postati rečenica.'
>>> l[1] = 'je'
>>> l[2] = 'postala'
>>> s = ' '.join(l)
>>> s
'Ovo je postala rečenica.'
Ako želimo stringove iz liste nizati jedan do drugog bez ikakvog razmaka za separator, treba odabrati prazni znak ''.
Metodu ćemo pozivati sa : ''.join(lista).
Npr.
>>> l = ['O', 'v', 'o', ' ', 'j', 'e', ' ', 's', 't', 'r', 'i', 'n', 'g', '!']
>>> s_1 = ''.join(l)
>>> s_1
'Ovo je string!'
Npr:Funkcija za zamjenu pojedinačnog znaka u stringu
def zamjena_znaka(x, i, znak):
x_l = list(x)
x_l[i] = znak
return ''.join(x_l)
>>> y = 'ABCDEFGH'
>>> y = zamjena_znaka(y, 7, 'N')
>>> y
'ABCDEFGN'
>>> y = zamjena_znaka(y, 0, 'Z')
>>> y
'ZBCDENGH'
Npr:Kombinacija – funkcije list(string) i metode sep.join(lista)
>>> l = [str(i) for i in range(10)]
>>> print(l)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> s = ''.join(l)
>>> print(s)
0123456789
>>> s_1 = ' '.join(l)
>>> print(s_1)
0 1 2 3 4 5 6 7 8 9
>>> print('-'.join(l))
0-1-2-3-4-5-6-7-8-9
Python omogućuje vrlo sažeto zapisivanje složenih operacija.
Zbog razumljivosti programa nije baš preporučljivo pisati složene i nerazumljive izraze, iako je katkada korisno i praktično iskoristiti te mogućnosti.
U nastavku su navedena dva takva primjera:
>>> print('--'.join([str(i) for i in range(10)]))
0--1--2--3--4--5--6--7--8--9
>>> print('--'.join(2 * [str(i) for i in range(10)]))
0--1--2--3--4--5--6--7--8--9--0--1--2--3--4--5--6--7--8--9
Metoda split(sep)
vratit će listu sastavljenu od "riječi" u stringu, pri čemu kao separator služi parametar sep.
Ako je separator izostavljen, onda se smatra da su riječi razdvojene jednim ili više znakova razmaka odnosno posebnih znakova (\n, \t).
Moglo bi se pomisliti da ćemo uz separator jednak praznom znaku '' dobiti jednaku listu kao s prije opisanom funkcijom list(string). Međutim, Python to ne dopušta.
To ilustrira ovaj primjer:
>>> s_0 = 'A mene tu ni minute nema'
>>> l_0 = s_0.split('')
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
l_0 = s_0.split('')
ValueError: empty separator
>>> l_0 = s_0.split()
>>> l_0
['A', 'mene', 'tu', 'ni', 'minute', 'nema']
>>> s_1 = 'A\nmene\ntu\nni\nminute\nnema'
>>> s_1
'A\nmene\ntu\nni\nminute\nnema'
>>> print(s_1)
A
mene
tu
ni
minute
nema
>>> l_1 = s_1.split()
>>> l_1
['A', 'mene', 'tu', 'ni', 'minute', 'nema']
>>> s_2 = 'A mene tu\n ni minute nema\n\n'
>>> print(s_2)
A mene tu
ni minute nema
>>> l_2 = s_2.split()
>>> l_2
['A', 'mene', 'tu', 'ni', 'minute', 'nema']
>>>
Metoda string.split() posebno je prikladna pri unošenju ulaznih podataka u neki programposredstvom funkcije input()
>>> s = input('Upisati koordinate točke x, y : ')
Upisati koordinate točke x, y : 50, 70
>>> l = s.split(',')
>>> x = int(l[0])
>>> y = int(l[1])
>>> print('x = {}\ny = {}'.format(x, y))
x = 50
y = 70
Zadatak:
Napišimo program koji će unositi koordinate dviju točkaka u ravnini u obliku (x, y).
Program treba ispisivati koordinate one točke koja je bliže ishodištu.
Rješenje: Problem u ovom zadatku je što će koordinate
biti unesene kao string, a ne kao dva broja. Funkcija tocka pretvorit će string u par
brojeva koji predstavljaju koordinate točke.
from math import sqrt
def tocka(a):
'''Funkcija pretvara string u par brojeva'''
# Brisanje prve i zadnje zagrade
a = a.replace('(', '')
a = a.replace(')', '')
# pretvaranje para brojeva u listu
t = a.split(',')
return int(t[0]), int(t[1])
def d(a, b):
'''Funkcija vraća udaljenost točke od ishodišta'''
return sqrt(a ** 2 + b ** 2)
def main():
a = input('A: ')
b = input('B: ')
xa, ya = tocka(a)
xb, yb = tocka(b)
if d(xa, ya) > d(xb, yb):
xa, ya, xb, yb = xb, yb, xa, ya
print('Koordinate točke bliže ishodištu su: ({}, })'.format(xa, ya))
return
main()
Funkciju tocka možemo napisati i uporabom metode strip:
def tocka(a):
'''Funkcija pretvara string u par brojeva'''
# Brisanje prve i zadnje zagrade
a = a.strip('()')
# pretvaranje para brojeva u listu
t = a.split(',')
return int(t[0]), int(t[1])
>>>
A: (2, 3)
B: (2, 4)
Koordinate točke bliže ishodištu su: (2, 3)