Selles artiklis õpime loendi ja koondarvude peamisi erinevusi ning nende kahe andmestruktuuri kasutamist.
Loendid ja koondarvud salvestavad ühe või mitu objekti või väärtust kindlas järjekorras. Loendis või ruudus olevad objektid võivad olla mis tahes tüüpi, kaasa arvatud märksõnaga Puudub midagi määratletud tüüpi.
Loendid ja loendid on enamikus kontekstides sarnased, kuid selles artiklis on mõningaid erinevusi.
Süntaksi erinevused
Loendi ja dupleksi süntaks on veidi erinev. Nimekirjad on ümbritsetud nurksulgudega ()
ja Tuples ümbritsetud sulgudega ()
.
Näide 1.1: loendi loomine vs Tuple loomine
list_num = (1,2,3,4) tup_num = (1,2,3,4) print(list_num) print(tup_num)
Väljund:
(1,2,3,4) (1,2,3,4)
Eespool määratlesime muutuja nimega list_num, mis sisaldab loendit numbritest 1
kuni 4
. Loend on ümbritsetud sulgudega ()
. Samuti määratlesime muutuja tup_num; mis sisaldab arvu numbreid 1
kuni 4
. Korrus on ümbritsetud sulgudega ()
.
Pythonis on meil type()
funktsioon, mis annab loodud objekti tüübi.
Näide 1.2: funktsiooni type () abil leiate andmestruktuuri tüübi
type(list_num) type(tup_num)
Väljund:
nimekiri kahekordne
Muutuv loend vs muutumatud tuplid
Loendil on muutuv olemus, st loendit saab pärast selle loomist vastavalt vajadustele muuta või muuta, samas kui tupel on muutumatu olemus, st tuppi ei saa pärast selle loomist muuta ega muuta.
Näide 2.1: üksuste loendi muutmine vs Tuple
list_num(2) = 5 print(list_num) tup_num(2) = 5
Väljund:
(1,2,5,4) Traceback (viimane kõne viimati): fail "python", rida 6, objektis TypeError: 'tuple' ei toeta üksuse määramist
Ülalolevas koodis määrasime 5
loendi_num indeksis 2
ja leidsime väljundis 5
indeksist 2
. Samuti 5
määrasime indeksi tup_num 2
ja saime type error
. Me ei saa dupletti muuta selle muutumatu olemuse tõttu.
Märkus. Kuna tupel on muutumatu, on need fikseeritud suurusega ja loendi suurus on erinev.
Saadaval olevad toimingud
Loenditel on rohkem sisseehitatud funktsioone kui kahekordsel. Saame kasutada dir((object))
sisseehitatud funktsiooni kõigi seotud funktsioonide hankimiseks loendi ja duplikaadi jaoks.
Näide 3.1: Loendikataloog
dir(list_num)
Väljund:
('__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__get __gt__ ',' __hash__ ',' __iadd__ ',' __imul__ ',' __init__ ',' __init_subclass__ ',' __iter__ ',' __le__ ',' __len__ ',' __lt__ ',' __mul__ ',' __ne____ ',' __ne__ ' , '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'lisa', 'lisa', lisa copy "," count "," laienda "," register ","sisesta ',' pop ',' eemalda ',' vastupidine ',' sorteeri ')
Näide 3.2: Tuple kataloog
dir(tup_num)
Väljund:
('__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__get __gt__ ',' __hash__ ',' __init__ ',' __init_subclass__ ',' __iter__ ',' __le__ ',' __len__ ',' __lt__ ',' __mul__ ',' __ne__ ',' __new__ ',' __reduce__ ',' __reduce__ ' , '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index')
Me näeme selgelt, et loendis on nii mitu lisafunktsionaalsust seotud. Võime sisestada ja hüpata, eemaldada ja sortida elemente loendis sisseehitatud funktsioonidega, mis pole Tuples saadaval.
Suuruse võrdlus
Kooslusoperatsioonide suurus on loendist väiksem, mis muudab selle natuke kiiremaks, kuid pole nii palju mainimist, kuni teil on tohutult palju elemente.
Näide 5.1: Arvutage loendi suurus võrreldes Tuplega
a= (1,2,3,4,5,6,7,8,9,0) b= (1,2,3,4,5,6,7,8,9,0) print('a=',a.__sizeof__()) print('b=',b.__sizeof__())
Väljund:
a = 104 b = 120
Ülalolevas koodis on meil samad üksused a ja nimekiri b, kuid dupleksi suurus on loendist väiksem.
Erinevad kasutusjuhtumid
Esmapilgul võib tunduda, et loendid võivad alati asendada tuplid. Kuid rühmad on äärmiselt kasulikud andmestruktuurid
- Tupli kasutamine loendi asemel võib anda programmeerijale ja tõlgile vihje, et andmeid ei tohiks muuta.
- Andmemahtu kasutatakse tavaliselt võtmeteta sõnastiku ekvivalendina. Näiteks,
(("Mõõkkala", "Dominic Sena", 2001), ("Snowden", "Oliver Stone", 2016), ("Taksojuht", "Martin Scorsese", 1976))
Ülaltoodud näide sisaldab loendeid, mis sisaldavad filmide loendit. - Andmete lugemine on lihtsam, kui loendisse salvestatakse rühmitus. Näiteks,
((2,4), (5,7), (3,8), (5,9))
on lihtsam lugeda kui((2,4), (5,7), (3,8), (5,9))
Tuple'i saab kasutada ka sõnaraamatus võtmetähtsusega nende muutumatu ja muutumatu olemuse tõttu, samas kui loendeid ei kasutata sõnastikus võtmeta, kuna loendit ei saa käsitleda __hash__()
ja see on muudetava iseloomuga.
key_val= (('alpha','bravo'):123) #Valid key_val = (('alpha','bravo'):123) #Invalid
Peamised punktid, mida meeles pidada:
- Korpuste sõnasõnaline süntaks on näidatud sulgudes
()
, loendite sõnasõnaline süntaks aga nurksulgudes()
. - Loenditel on muutuv pikkus, kahel on fikseeritud pikkus.
- Loendil on muutuv olemus, kahel on muutumatu olemus.
- Loendis on rohkem funktsioone kui kahes.