• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

#wit.py – Structuri de date Partea 2

0
  • Publicat de Bogdan Condurache
  • în Python
  • — 31 Mai, 2012 at 7:40 pm

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

Distribuie

Etichete: indexareindexinglistelistslongintpythonslicingstringtablouritablouri unidimensionaletuples

— Bogdan Condurache a scris 79 articole

Contact | bogdan@worldit.info | @bcman31 | WorldIT Mă numesc Bogdan Condurache şi sunt pasionat de informatică, în special de securitatea IT. Am experienţă în malware researching şi programare în diverse limbaje. Am reuşit să evoluez datorită WorldIT, mulţumită articolelor de calitate de pe acest blog, iar acum vreau să ajut la rândul meu. Dacă eşti de părere că poţi ajuta la dezvoltarea acestei comunităţi, nu ezita să o faci.

  • Articolul anterior DefCamp & Hack a Server vin la Cluj-Napoca la o întâlnire Get Together pe 8 iunie
  • Articolul următor Infografic de sâmbătă #21 – Despre e-reader

Articole similare

  • python_logo_without_textsvg
    #wit.py – Structuri de date Partea 1 24 Mai, 2012
  • 2204-computer-hacker[1]
    CorkaMIX.exe – un fișier valid simultan ca PE/PDF/HTML/JAR(CLASS+ZIP)/PY 2 Aug, 2012
  • python_logo_without_textsvg
    #wit.py – Funcţii de bază în Python 18 Mai, 2012
  • Scripting Languages
    Hyperpolyglot – tabel comparativ pentru limbajele de scripting PHP, Perl, Python, Ruby 15 Aug, 2011

Lasă un răspuns Anulează răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

Poți folosi aceste etichete HTML și atribute: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Anunță-mă pe e-mail când apar răspunsuri noi.



    Abonează-te Gratuit!

  • Mai multe articole

    • Recent Posts
    • Most Popular
    • Comments
    • Tags
    • google_carCum vede mediul înconjurător mașina ce se conduce singură de la Google?mai 13, 2013
    • 53cb7cffa27c89a43bc91b40f604f7e2_largeGhost – o platformă de blogging finanțată integral pe Kickstarter creată pentru a publicamai 12, 2013
    • brandeddomainsStarea domeniilor .RO integrate intr-un infograficmai 2, 2013
    • CyberSecuritySecuritatea infrastructurilor informatice în Româniamai 1, 2013
    • cine-e-pe-invisibilDesignul aplicatiilor – Yahoo! Messenger: De ce nu mai merge detectarea userilor pe invizibil?februarie 17, 2011
    • gotxt-free-smsTrimite SMS Gratuit in Romaniaseptembrie 15, 2009
    • poza_nouaRomanian National Security – a fost UK, acum Franta cu Lemonde.fraprilie 19, 2010
    • Google+Google+ (Plus) – primul proiect social marca Google de la A la Ziulie 2, 2011
    • Stefan-Geek Blog a scris un comentariu în:Ghost – o platformă de blogging finanțată integral pe Kickstarter creată pentru a publica
    • Review Centre - TamilBB a scris un comentariu în:ITAssistant.org, blog de tutoriale Linux și Windows este donat către worldit.info
    • Simona a scris un comentariu în:Cautarea unui element intr-un vector
    • Doru a scris un comentariu în:Ghost – o platformă de blogging finanțată integral pe Kickstarter creată pentru a publica
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox ONI online PHP programare retea sociala review securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • Caută

  • Activitate recentă

    • Stefan-Geek Blog a scris un comentariu în:Ghost – o platformă de blogging finanțată integral pe Kickstarter creată pentru a publica
    • Review Centre - TamilBB a scris un comentariu în:ITAssistant.org, blog de tutoriale Linux și Windows este donat către worldit.info
    • Simona a scris un comentariu în:Cautarea unui element intr-un vector
    • Doru a scris un comentariu în:Ghost – o platformă de blogging finanțată integral pe Kickstarter creată pentru a publica
  • Facebook

  • mai 2013
    Lu Ma Mi Jo Vi Sâ Du
    « Apr    
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031  

    Link-uri sponsorizate

  • Laptop second hand

  • Calculatoare Second Hand

  • Home
  • Tehnic
  • Python
  • #wit.py – Structuri de date Partea 2
  • Important

    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
    • GREPIT
    • Security Sources
    • Wedu
  • Prieteni

    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Devirusare
    • Gadgeturi si IT – Giz.ro
    • GSMRo.ro
  • Prieteni

    • Ionut Dobre
    • Lab501
    • PC – Config
    • Tutoriale WEB – Ghid de programare web
    • TutorialePC

Copyright © 2009-2013 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons