3. Duomenų Struktūros ‐ 1 Dalis - MantsSk/CA_PTUA14 GitHub Wiki
Šiame skyriuje apžvelgsime pirmąją Python duomenų struktūrą - sąrašą (nuo šiol naudosim EN terminą - 'list' arba sukurtą svetimybę - 'list'e') arba tai, kas kitose programavimo kalbose vadinama masyvu (array).
List gali neturėti reikšmių, jie gali būti tušti arba juose gali būti tiek objektų, kiek leidžia operatyvioji atmintis. Be to, taip jau atsitiko, kad Python programoje list galima laikyti bet kokio tipo reikšmes, tai gali būti kiti objektai, funkcijos, eilutės, sveikieji skaičiai, jūsų pačių duomenų tipai ar net kiti list. Svarbu paminėti ir tai, kad list esančios objektų reikšmės galime keisti.
List žymėjimas yra laužtiniai skliaustai: [ ] - du skliaustai, tarp kurių yra kableliais atskirtos reikšmės.
my_list = [] # Instantiating empty listSu metodu .append(), galima įterpti elementą į 'list': append(<object>)
my_list = []
name = "Tom"
my_list.append(name)
print(my_list)Kadangi list'e gali būti dubliuotų reikšmių, ši funkcija leidžia apskaičiuoti elemento dažnį sąraše:
my_list = [1, 1, 2 ,3 ,4 ,5]
print(my_list.count(1)) # 2Kaip matėme, append visada prideda reikšmę į list'o galą, o .insert() - leidžia pridėti reikšmę į bet kurį norimą indeksą (index):
my_list = [1, 1, 2 ,3 ,4 ,5]
my_list.insert(1, 50)
print(my_list)
# [1, 50, 1, 2, 3, 4, 5]Pavadinimas kalba pats už save: šiuo metodu tiesiog išmesime tam tikrą reikšmę iš list'o:
my_list = [1, 1, 2 ,3 ,4 ,5]
my_list.remove(1)
print(my_list)Funkcija pašalins pirmą rastą objektą. Jei norite iš list'o pašalinti tam tikrą elementą, tai galite padaryti naudodami slicing mechanizmą:
my_list = [1, 1, 2 ,3 ,4 ,5]
my_list.remove(my_list[-1]) # removing last item from the list
print(my_list) [1, 1, 2, 3, 4]Kadangi su tokiomis funkcijomis, kaip print ir dar keliomis kitomis, jau susidūrėme, su "Python" list duomenų struktūra taip pat galima jas panaudoti:
Atkreipkite dėmesį, kad dabar neturime simbolio ., o tai reiškia, kad yra atskirų funkcijų, kurios nepriklauso konkrečiam duomenų tipui.
Kaip jau aptarėme anksčiau, list duomenų struktūra gali būti bet kokio ilgio, todėl būtų gerai žinoti, su kokio dydžio list'u susiduriame. Čia praverčia len():
my_list = ["name", 123, None, True]
print(len(my_list)) # 4Jei tarkim turite list'a sudarytą iš int, float reikšmių , naudodami šią funkciją galite sužinoti didžiausią reikšmę:
my_list = [50, 99, 1, -50]
print(max(my_list))Jei tarkim turite list'a sudarytą int, float reikšmių , naudodami šią funkciją galite sužinoti mažiausią reikšmę:
my_list = [50, 99, 1, -50]
print(min(my_list))Viena iš list stiprybių yra ta, kad jei norime atlikti tam tikras operacijas su elementais esančiais duomenų struktūroje, galim iteruoti per jas ir atlikti tam tikrus veiksmus:
🦺 Mes suprantam, kad dar nepraėjome ciklų temos, bet šiuo taveju, tai gali būti puiki vieta įvadui ateinančiom paskaitoms 🦺
my_list = [1, 2, 3]
for item in my_list:
print(item)arba galime atlikti keletą operacijų vienu kartu!
my_list = [1, 2, 3]
for item in my_list:
print(item + 20)my_list = [1, 2, 3]
my_list[2] = 5
print(my_list)Kaip ir string atveju, taip ir su list galime atlikti slicing operacijas. Beto, ** kiekvienas 'list' elementas turi indeksą (index), prasidedantį nuo 0** :
my_list = ["first", "second", "third"]
print(my_list[-1])
print(my_list[:1])
print(my_list[::2])
print(my_list[::-1])
print(my_list[0:2])Jei norite patikrinti, ar tam tikras objektas yra list'e, galite daryti taip:
my_list = [1, 2, 3]
print(1 in my_list)Dar viena labai panaši duomenų struktūra yra Tuple. Pagrindinis skirtumas yra tas, kad Tuple objektų reikšmės yra nekeičiamos. Tai reiškia, kad turime objektą, kuriame yra kelios reikšmės, jos gali būti dubliuojamos, beveik visos savybės yra panašios, išskyrus tai, kad Tuple elementų negalima keisti.
Tuple žymėjimas **( )** - du skliausteliai, kur vertės atskiriamos kableliais.
empty_tuple = ()
tuple_single_item = (1,)
another_tuple = (1, 2, 3)Atkreipkite dėmesį, kad po kiekvieno elemento tuple turi būti kablelis, nors gali būti tik vienas elementas. Visa kita yra tas pats, kaip ir list'e.
Tai yra lygiai tas pats kaip su sąrašais, išskyrus tai, kad tuple yra nekintantis. Jei bandysite priskirti naują reikšmę, gausite klaidą:
🛑
my_tuple = (1, 2, 3)
my_tuple[0] = 500 # TypeError: 'tuple' object does not support item assignmentDabar atrodo, kad list yra daug pranašesni už tuples, tačiau programavime ne visada viskas yra vienpusiška,ir tai priklauso nuo tam tikrų situacijų.
Paprastai statinėms reikšmėms, kurios nesikeičia, rekomenduojama naudoti tuple, nes python kalboje jis yra šiek tiek greitesnis nei list. O list turėtume naudoti visada, kai reikšmės gali keistis, arba kai pats 'list' didės arba mažės.
Visus atsakymus reikia spausdinti terminale
- Parašykite python programą, kuri iš
list'ogauna didžiausią ir mažiausią vertes ir jas išspausdinkite į terminalą (visilistelementai yraintarbafloattipo.List'asukurkite patys). - Parašykite python programą, kuri susumuoja visus
listelementus ir išspausdiną rezultatą (visilistelementai yraintarbafloattipo.List'asukurkite patys. Yra tokia funkcija, kuri sudeda ir grąžina sąrašo skaičių sumą, pabandykite pagoogle'inti). - Sukurkite du
list'usir juos sujunkite į vieną 'list'ą. Gautą vieną listą išspausdinkite į terminalą. - Parašykite python programą, kuri paprašytų naudotojo įvesti 3
inttipo skaitmenis (1,2,3 etc..) ir rastų didžiausią įvestą reikšmę. - Parašykite python programą, kuri išspausdina iš eilės visus list'o elementus (
List'asukurkite patys, pabandykite naudoti 'for' ciklą). - Pabandykite atlikti tuos pačius pratimus su
tuples.