21
Povezanost stringova i listi Pretvorba stringa u listu i liste stringova u jedan string

Povezanost Stringova i Listi

Embed Size (px)

DESCRIPTION

informatika

Citation preview

Page 1: Povezanost Stringova i Listi

Povezanost stringova i listi

Pretvorba stringa u listu i liste stringova u jedan string

Page 2: Povezanost Stringova i Listi

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', '!']

Page 3: Povezanost Stringova i Listi

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:

Page 4: Povezanost Stringova i Listi

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.'

Page 5: Povezanost Stringova i Listi

Ako želimo stringove iz liste nizati jedan do drugog bez ikakvog razmaka za separator, treba odabrati prazni znak ''.

Metodu ćemo pozivati sa : ''.join(lista).

Page 6: Povezanost Stringova i Listi

Npr.

>>> l = ['O', 'v', 'o', ' ', 'j', 'e', ' ', 's', 't', 'r', 'i', 'n', 'g', '!']

>>> s_1 = ''.join(l)

>>> s_1

'Ovo je string!'

Page 7: Povezanost Stringova i Listi

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)

Page 8: Povezanost Stringova i Listi

>>> y = 'ABCDEFGH'

>>> y = zamjena_znaka(y, 7, 'N')

>>> y

'ABCDEFGN'

>>> y = zamjena_znaka(y, 0, 'Z')

>>> y

'ZBCDENGH'

Page 9: Povezanost Stringova i Listi

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

Page 10: Povezanost Stringova i Listi

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:

Page 11: Povezanost Stringova i Listi

>>> 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

Page 12: Povezanost Stringova i Listi

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.

Page 13: Povezanost Stringova i Listi

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

Page 14: Povezanost Stringova i Listi

>>> 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

Page 15: Povezanost Stringova i Listi

>>> 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']

>>>

Page 16: Povezanost Stringova i Listi

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

Page 17: Povezanost Stringova i Listi

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.

Page 18: Povezanost Stringova i Listi

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])

Page 19: Povezanost Stringova i Listi

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()

Page 20: Povezanost Stringova i Listi

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])

Page 21: Povezanost Stringova i Listi

>>>

A: (2, 3)

B: (2, 4)

Koordinate točke bliže ishodištu su: (2, 3)