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 list
Su 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)) # 2
Kaip 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)) # 4
Jei 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 assignment
Dabar 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'o
gauna didžiausią ir mažiausią vertes ir jas išspausdinkite į terminalą (visilist
elementai yraint
arbafloat
tipo.List'a
sukurkite patys). - Parašykite python programą, kuri susumuoja visus
list
elementus ir išspausdiną rezultatą (visilist
elementai yraint
arbafloat
tipo.List'a
sukurkite patys. Yra tokia funkcija, kuri sudeda ir grąžina sąrašo skaičių sumą, pabandykite pagoogle'inti). - Sukurkite du
list'us
ir juos sujunkite į vieną 'list'ą. Gautą vieną listą išspausdinkite į terminalą. - Parašykite python programą, kuri paprašytų naudotojo įvesti 3
int
tipo 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'a
sukurkite patys, pabandykite naudoti 'for' ciklą). - Pabandykite atlikti tuos pačius pratimus su
tuples
.