Jump to content
bcman

#wit.py – Structuri de date Partea 2

Recommended Posts

*

Articolul original a fost scris de mine, Bogdan Condurache, pentru Wolrdit*

Vom continua subiectul dezb?tut în articolul anterior, deoarece, atât despre liste, cât ?i despre tuples mai sunt multe de spus.

S? începem cu un mic exemplu în care o propozi?ie citit? de la tastatur? va fi afi?at? într-un chenar, în centrul ferestrei.

# Prints a sentence in a centered "box" of correct width
# Note that the integer division operator (//) only works in Pytho
# 2.2 and newer. In earlier versions, simply use plain division (/
sentence = raw_input("Sentence: ")
screen_width = 80
text_width = len(sentence)
box_width = text_width + 6
left_margin = (screen_width - box_width) // 2
print
print ' ' * left_margin + '+' + '-' * (box_width-2) + '+'
print ' ' * left_margin + '| ' + ' ' * text_width + ' |'
print ' ' * left_margin + '| ' + sentence + ' |'
print ' ' * left_margin + '| ' + ' ' * text_width + ' |'
print ' ' * left_margin + '+' + '-' * (box_width-2) + '+'
print
raw_input() #programul va astepta apasarea unei taste inainte de inchidere

Exemplul este destul de u?or de în?eles, de aceea nu voi insista asupra lui ?i vom trece mai departe.

Apartenen?a

>>> permisiuni = 'ab'
>>> 'a' in permisiuni
True
>>> 'w' in permisiuni
False
>>> utilizatori = ('Andrei', 'Cristi', 'Bogdan')
>>> raw_input('nume: ') in utilizatori
nume: Bogdan
True
>>> raw_input('nume: ') in utilizatori
nume: Dinozaur
False

Dup? cum a?i putut observa, prin intermediul in se verific? apartenen?a unui string (sau list? sau tuple) într-un alt string (sau list? sau tuple).

Observa?ie: valoarea returnat? de in este de tip boolean, adic? True sau False (respectiv 1 sau 0) ?i va preciza doar dac? obiectul este prezent, nu ?i de câte ori apare.

Un exemplu pentru observa?ia de mai sus:

>>> subiect = '!!! Important !!!'
>>> '!!!' in subiect
True

Exemplul urm?tor este un program ce con?ine o „baz? de date” (defapt este o banal? list?) preconceput? ?i verific? dac? combina?ia user – parol? citit? de la tastatur? se afl? în list?. Am fost nevoit s? folosesc instruc?iunea if. Pentru a v-o explica pe scurt, pot spune c? aceast? instruc?iune verific? dac? declara?ia imediat urm?toare (denumit? ?i condi?ie) este adev?rat? ?i, în caz afirmativ, comanda de dup? condi?ie va fi executat?.

db = [
['andrei', '1337'],
['bogdan', '8080'],
['raul', '2425'],
['ionut', '7331']
]
nume = raw_input('Nume: ')
passw = raw_input('Parola: ')
if [nume, passw] in db: print 'Acceptat'

În cazul de fa??, prin if se verific? dac? lista alc?tuit? din nume ?i parol? este prezent? în lista denumit? db ?i dac? da, se va afi?a Acceptat.

Func?ii utile

Am folosit în primul exemplu de azi func?ia len() , care returneaz? lungimea unui string. Aceasta al?turi de min() ?i max() pot fi foarte utile în utilizarea stringurilor. Exemplele de ma jos explic? foarte bine utilizarea acestor func?ii.

>>> numbers = [100, 34, 678]
>>> len(numbers)
3
>>> max(numbers)
678
>>> min(numbers)
34
>>> max(2, 3)
3
>>> min(9, 3, 2, 5)
2

Func?ia list

Avantajul unei liste este c?, spre deosebire de un string, poate fi manipulat. De aceea se poate dovedi util în unele cazuri s? transformi un string în list? ?i, eventual, invers.

>>> list('WorldIT')
['W', 'o', 'r', 'l', 'd', 'I', 'T']
>>> convert = list('WorldIT')
>>> convert
['W', 'o', 'r', 'l', 'd', 'I', 'T']
>>> convert2 = ''.join(convert)
>>> convert2
'WorldIT'
>>> type(convert)
<type 'list'>
>>> type(convert2)
<type 'str'>

Not?: list este defapt un tip de date (de unde ?i type list de mai sus). Totu?i, diferen?a nu trebuie s? v? preocupe.

Despre join voi spune mai multe într-un articol viitor.

Opera?ii de baz? cu listele

V-am tot spus c? o list? poate fi modificat?. Ei, a sosit timpul s? vede?i cum pute?i modifica o list?, lucru care e destul de simplu.

>>> a = [1, 2, 3]
>>> a[1] = 5
>>> a
[1, 5, 3]

Aten?ie, nu se poate modifica o valoare care nu exist? (în cazul de fa??, nu a? putea modifica a[5]).

Pentru a ?terge ?i a ad?uga (la sfâr?it) elemente în list? se folose?te del, respectiv append (care este o metod? – method):

>>> del a[2]
>>> a
[1, 5]
>>> a.append(9)
>>> a
[1, 5, 9]

O alt? metod? folosit? pentru a modifica (de data aceasta p?r?i mai mari) dintr-o list? este aceea de a te folosi de slicing:

>>> name = list('Perl')
>>> name[1:] = list('ython')
>>> name
['P', 'y', 't', 'h', 'o', 'n']

În urm?torul exemplu, acest? metod? este folosit? pentru a înlocui caractere de la cap?tul listei (similar cu del, iar în alte cazuri se poate folosi în locul lui append):

>>> numbers = [1, 5]
>>> numbers[1:1] = [2, 3, 4]
>>> numbers
[1, 2, 3, 4, 5]

Methods

Alte câteva metode utile ar fi:

  • count – num?r? de câte ori apare un obiect într-o list?
    >>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
    2
    >>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
    >>> x.count(1)
    2
    >>> x.count([1, 2])
    1


  • extend – asem?n?toare cu concatenarea, doar c? aceasta modific? lista ini?ial?
    >>> a = [1, 2, 3]
    >>> b = [4, 5, 6]
    >>> a.extend(
    >>> a
    [1, 2, 3, 4, 5, 6]


  • index – returneaz? pozi?ia primei apari?ii a unui element în list?
    >>> knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni']
    >>> knights.index('who')
    4
    >>> knights.index('herring')
    Traceback (innermost last):
    File "<pyshell#76>", line 1, in ?
    knights.index('herring')
    ValueError: list.index(x): x not in list


  • insert – insereaz? un element în list?, pe pozi?ia specificat?
    >>> numbers = [1, 2, 3, 5, 6, 7]
    >>> numbers.insert(3, 'four')
    >>> numbers
    [1, 2, 3, 'four', 5, 6, 7]


  • pop – elimin? ?i returneaz? un element de pe pozi?ia specificat?
    >>> x = [1, 2, 3]
    >>> x.pop()
    3
    >>> x
    [1, 2]
    >>> x.pop(0)
    1
    >>> x
    [2]

    Observa?ie: Aceast? metod? al?turi de count sunt singurele metode care returneaz? o valoare. Restul returneaz? None.
  • remove – elimin? prima apari?ie a obiectului specificat
    >>> x = ['to', 'be', 'or', 'not', 'to', 'be']
    >>> x.remove('be')
    >>> x
    ['to', 'or', 'not', 'to', 'be']


  • reverse – inverseaz? lista
    >>> x = [1, 2, 3]
    >>> x.reverse()
    >>> x
    [3, 2, 1]


  • sort – sorteaz? lista
    >>> x = [4, 6, 2, 1, 7, 9]
    >>> x.sort()
    >>> x
    [1, 2, 4, 6, 7, 9]


    sortare invers?:

    >>> x = [4, 6, 2, 1, 7, 9]
    >>> x.sort(reverse=True)
    >>> x
    [9, 7, 6, 4, 2, 1]


    atribuirea gre?it? dup? sortare:

    >>> x = [4, 6, 2, 1, 7, 9]
    >>> y = x.sort() # sort returneaza None
    >>> print y
    None


    atribuirea corect? dup? sortare:

    >>> x = [4, 6, 2, 1, 7, 9]
    >>> y = x[:]
    >>> y.sort()
    >>> x
    [4, 6, 2, 1, 7, 9]
    >>> y
    [1, 2, 4, 6, 7, 9]


Încheiere

Nu am mai insistat asupra metodelor, deoarece consider c? sunt u?or de în?eles din exemple. V? recomand s? nu le toci?i, ci, s? le folosi?i cât mai des ?i astfel v? ve?i obi?nui cu cele de care ave?i nevoie. Dac? uita?i cum s? face?i un lucru folosind o metod?, nu e nicio problem?. Pute?i s? c?uta?i pe Google, sau, de ce nu, s? v? folosi?i de acest articol. Voi termina aceast? „serie” data viitoare, când v? voi prezenta mai multe despre tuples.

*Am folosit exemple de cod din cartea Beginning Python: From Novice to Professional de Magnus Lie Hetland, ISBN: 159059519X *

Edited by bcman
  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...