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

Daca acest articol contine o greseala, selecteaza cuvintele sau fraza gresita si tasteaza combinatia de taste Shift + Enter sau apasa click aici pentru a o raporta. Multumim!

Etichete: indexareindexinglistelistslongintpythonslicingstringtablouritablouri unidimensionaletuples

— Bogdan Condurache a scris 80 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

  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    • imacoolat-curat.ro
      | Published: februarie 3, 2020 - 2:00 am
    • hotel-palace.ro
      | Published: februarie 2, 2020 - 2:00 am
    • www.tahometru.ro
      | Published: februarie 1, 2020 - 2:00 am
    • alexisart.ro
      | Published: ianuarie 30, 2020 - 2:00 am
    • justshop.ro
      | Published: ianuarie 29, 2020 - 2:00 am
    RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • 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 online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • ianuarie 2021
    L Ma Mi J V S D
    « dec.    
     123
    45678910
    11121314151617
    18192021222324
    25262728293031
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

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

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

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

Multumim foarte mult ca ne-ai raportat greseala! O vom remedia in cel mai scurt timp posibil.