Povezanost Stringova i Listi

Post on 04-Dec-2015

34 views 5 download

description

informatika

Transcript of Povezanost Stringova i Listi

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)