Danas ću govoriti o tipu podataka kao što je liste, operacije nad njima i metode, o generatorima lista i o korištenju lista.
Šta su liste?
Liste u Pythonu su uređene promjenjive kolekcije objekata proizvoljnih tipova (skoro kao niz, ali tipovi se mogu razlikovati).
Da biste koristili liste, morate ih kreirati. Postoji nekoliko načina za kreiranje liste. Na primjer, možete obraditi bilo koji iterable objekat (na primjer) sa ugrađenom funkcijom lista:
>>> lista ["list"]Također možete kreirati listu koristeći literal:
>>> s = # Prazna lista >>> l = ["s", "p", ["isok"], 2] >>> s >>> l ["s", "p", ["isok" "], 2]Kao što možete vidjeti iz primjera, lista može sadržavati bilo koji broj bilo kojih objekata (uključujući ugniježđene liste) ili ništa.
I drugi način za kreiranje liste je generatori liste... Generator liste je način da se napravi nova lista primjenom izraza na svaki element u nizu. Generatori liste su vrlo slični petlji.
>>> c = [c * 3 za c u "listu"] >>> c ["lll", "iii", "sss", "ttt"]Moguća je i složenija konstrukcija generatora liste:
>>> c = [c * 3 za c u "listi" ako je c! = "i"] >>> c ["lll", "sss", "ttt"] >>> c = [c + d za c u "listu" ako je c! = "i" za d u "spam" ako je d! = "a"] >>> c ["ls", "lp", "lm", "ss", "sp", "sm", "ts", "tp", "tm"]Ali u složenim slučajevima, bolje je koristiti običnu for petlju za generiranje lista.
Navedite funkcije i metode
Kreirajte kreirano, sada morate nešto učiniti sa listom. Za liste su dostupne osnovne kao i metode liste.
Lista metoda
Metoda | Šta on radi |
---|---|
list.append(x) | Dodaje stavku na kraj liste |
list.extend(L) | Proširuje listu dodavanjem svih elemenata L na kraj |
list.insert(i, x) | Umeće vrijednost x na i-ti element |
list.remove(x) | Uklanja prvi element na listi koji ima vrijednost x. ValueError ako takav element ne postoji |
list.pop([i]) | Uklanja i-ti element i vraća ga. Ako indeks nije naveden, posljednji element se uklanja |
list.index(x,]) | Vraća poziciju prvog elementa s vrijednošću x (prilikom pretraživanja od početka do kraja) |
list.count(x) | Vraća broj elemenata sa vrijednošću x |
list.sort() | Sortira listu na osnovu funkcije |
lista.obrnuto() | Proširuje listu |
list.copy() | Plitka kopija liste |
list.clear() | Briše listu |
Treba napomenuti da metode lista, za razliku od, modifikuju samu listu, te stoga rezultat izvršenja ne mora biti upisan u ovu varijablu.
>>> l = [1, 2, 3, 5, 7] >>> l. sortiraj () >>> l >>> l = l. sortiraj () >>> print (l) NemaI na kraju, primjeri rada sa listama:
>>> a = [66.25, 333, 333, 1, 1234.5] >>> print (a. count (333), a. count (66.25), a. count ("x")) 2 1 0 >>> a. umetnuti (2, - 1) >>> a. dodaj (333) >>> a >>> a. indeks (333) 1 >>> a. ukloniti (333) >>> a >>> a. obrnuto () >>> a >>> a. sortiraj () >>> a [-1, 1, 66.25, 333, 333, 1234.5]Povremeno, kako bi se povećale performanse, liste se zamjenjuju sa mnogo manje fleksibilnim.
Da bih odgovorio na ovo pitanje, moram objasniti neograničene zamjenske znakove i ograničene zamjenske znakove.
Sadržaj ovog posta je sastavljen iz java dokumentacije.
1. Neograničeni zamjenski znakovi
Neograničeni tip džokera je specificiran pomoću zamjenskog znaka (?), na primjer, Lista>... Ovo se zove lista nepoznatog tipa. Postoje dva scenarija u kojima je neograničeni zamjenski znak koristan pristup:
Ako napišete metodu koja se može implementirati pomoću funkcija navedenih u Object.
Kada kod koristi metode u generičkoj klasi koje su nezavisne od parametra tipa. Na primjer, List.size ili List.clear. U stvari, Class>tako se često koristi jer većina metoda iz Class
ne zavisi od T.
2. Ograničeni zamjenski znakovi
javna apstraktna klasa Shape (javno apstraktno crtanje praznine (Canvas c);) javna klasa Krug proširuje oblik (privatni int x, y, radijus; javno crtanje praznine (Canvas c) (...)) javna klasa Pravougaonik proširuje oblik (privatni int x, y, širina, visina; javno crtanje praznine (Canvas c) (...))Razmislite o jednostavnoj aplikaciji za crtanje koja može crtati oblike kao što su pravokutnici i krugovi. Da biste predstavili ove forme unutar programa, možete definirati hijerarhiju klasa kao što je:
javna klasa Canvas (javno izvlačenje praznine (Shape s) (s.draw (ovo);))Ove klase se mogu nacrtati na platnu:
public void drawAll (ListaSvaki crtež obično sadrži nekoliko oblika. Pod pretpostavkom da su predstavljeni kao lista, bilo bi zgodno imati metodu u Canvas koja ih sve crta:
Pravila tipa sada kažu da se drawAll () može pozvati samo na listama tačnog oblika: ne može se, na primjer, pozvati na Listi
... Ovo je žalosno jer cijela metoda čita oblike sa liste, tako da se isto tako lako može pozvati na Listi ... Zaista želimo da metoda prihvati listu bilo kojeg oblika: public void drawAll (forme liste) (...) Evo male, ali vrlo važne razlike: zamijenili smo tip liste na Listi extends Shape>... Sada će drawAll () prihvatiti liste bilo koje podklase Shape, tako da je sada možemo pozvati ako želimo. Lista extends Shape>je primjer ograničenog šablona. ? označava nepoznati tip, međutim u ovom slučaju znamo da je ovaj nepoznati tip u stvari podtip oblika. (Napomena: to može biti sam oblik ili neka podklasa, ne bi trebalo doslovno proširiti oblik.) Kažemo da je Shape oblik. gornja granica divlja karta.
Slično, sintaksa? super T, koji je ograničeni zamjenski znak, označava nepoznati tip koji je supertip T. ArrayedHeap280 super Integer>na primjer uključuje ArrayedHeap280
Jedna od ključnih karakteristika Pythona koja ga čini tako popularnim je njegova jednostavnost. Lakoća rada sa različitim strukturama podataka – listama, tuplema, rječnicima i skupovima – posebno je impresivna. Danas ćemo razmotriti rad sa listama.
Šta je lista u Pythonu?
Lista je struktura podataka za pohranjivanje objekata različitih tipova. Ako ste koristili druge programske jezike, trebali biste biti upoznati s konceptom niza. Dakle, lista je vrlo slična nizu, samo, kao što je gore spomenuto, u njega možete pohraniti objekte različitih tipova. Veličina liste nije statična, može se mijenjati. Lista je, po svojoj prirodi, promjenjiv tip podataka. Možete pročitati detaljno o tipovima podataka.... Varijabla, definirana kao lista, sadrži referencu na strukturu u memoriji, koja zauzvrat sadrži reference na neki drugi objekt ili strukturu.
Kako se liste pohranjuju u memoriju?
Kao što je gore spomenuto, lista je promjenjiv tip podataka. Kada se kreira, u memoriji se rezerviše oblast, koja se konvencionalno može nazvati "kontejner", u kojoj se pohranjuju reference na druge elemente podataka u memoriji. Za razliku od tipova podataka kao što su broj ili string, sadržaj "kontejnera" liste može se menjati. Kako biste što bolje vizualizirali ovaj proces, pogledajte sliku ispod. U početku je kreirana lista koja sadrži reference na objekte 1 i 2, nakon operacije a = 3, druga veza na listi je počela da ukazuje na objekat 3.
Kreiranje, modifikacija, brisanje lista i rad sa njenim elementima
Možete kreirati listu na jedan od sljedećih načina.
>>> a =>>> tip (a)< class "list" >>>> b = lista ()>>> tip (b)< class "list" >Takođe možete kreirati listu sa unapred definisanim skupom podataka.
>>> a =>>> tip (a)< class "list" >Ako već imate listu i želite da kreirate njenu kopiju, možete koristiti sljedeću metodu:
>>> a =>>> b = a [:]>>> print (a)>>>ili to uradi ovako:
>>> a =>>> b = lista (a)>>> ispis (a)>>> ispis (b)U slučaju da jednostavno dodijelite liste jedna drugoj, onda varijabla bće biti dodijeljena referenca na istu stavku podataka u memoriji koja se referencira a umjesto kopije liste a... One. ako promijenite listu a, onda b promeniće se takođe.
>>> a =>>> b = a>>> print (a)>>> print (b)>>> a = 10>>> print (a)>>> print (b)Dodavanje stavke na listu vrši se metodom append ().
>>> a =>>> a.append (3)>>> a.append ("zdravo")>>> print (a)Za uklanjanje elementa sa liste, u slučaju da znate njegovu vrijednost, koristite metodu remove (x), ovo će ukloniti prvu vezu do ovog elementa.
>>> b =>>> ispiši (b)>>> b.ukloni (3)>>> ispiši (b)Ako trebate izbrisati element prema njegovom indeksu, koristite naredbu del liste_name [indeks].
>>> c =>>> print (c)>>> del c>>> print (c)Možete promijeniti vrijednost stavke liste, znajući njen indeks, direktnim pristupom.
>>> d =>>> print (d)>>> d = 17>>> print (d)Listu možete obrisati jednostavnim ponovnim pokretanjem, kao da je ponovo kreirate.Da biste pristupili stavci na listi, navedite indeks te stavke u uglastim zagradama.
>>> a =>>> a 7Možete koristiti negativne indekse, u kom slučaju će brojanje ići od kraja, na primjer, da biste pristupili posljednjem elementu liste, možete koristiti sljedeću naredbu:
>>> a [- 1] 0Da biste sa liste dobili podlistu u određenom rasponu indeksa, navedite početni i završni indeks u uglastim zagradama, odvojene dvotočkom.
>>> aLista metoda
list.append (x)
Dodaje stavku na kraj liste. Ista operacija se može uraditi i ovako a = [x].
>>> a =>>> a.dodati (3)>>> ispiši (a)list.extend (L)
Proširuje postojeću listu dodavanjem svih stavki sa liste L... Ekvivalentno komandi a = L.
>>> a =>>> b =>>> a.proširi (b)>>> ispiši (a)list.insert (i, x)
Umetnite stavku x na poziciji i... Prvi argument je indeks elementa nakon kojeg će element biti umetnut x.
>>> a =>>> a.insert (0, 5)>>> print (a)>>> a.insert (len (a), 9)>>> print (a)list.remove (x)
Uklanja prvo pojavljivanje elementa x sa liste.
>>> a =>>> a.ukloni (1)>>> ispiši (a)list.pop ([i])
Uklanja element sa pozicije i i vraća ga. Ako koristite metodu bez argumenta, posljednja stavka sa liste će biti uklonjena.
>>> a =>>> print (a.pop (2)) 3>>> print (a.pop ()) 5>>> print (a)list.clear ()
Uklanja sve elemente sa liste. Ekvivalentno del a [:].
>>> a =>>> print (a)>>> a.clear ()>>> print (a)list.index (x [, početak [, kraj]])
Vraća indeks stavke.
>>> a =>>> a.indeks (4) 3list.count (x)
Vraća broj pojavljivanja elementa x na listu.
>>> a =>>> print (a.broj (2)) 2list.sort (ključ = ništa, obrnuto = lažno)
Sortira stavke na listi uzlaznim redoslijedom. Za sortiranje obrnutim redoslijedom koristite zastavicu obrnuto = Tačno... Dodatne opcije otvaraju parametar ključ, pogledajte dokumentaciju za više detalja.
>>> a =>>> a.sort ()>>> print (a)list.reverse ()
Obrnite redosled stavki na listi.
>>> a =>>> a.obrnuto ()>>> ispis (a)list.copy ()
Vraća kopiju liste. Ekvivalentno a [:].
>>> a =>>> b = a.copy ()>>> print (a)>>> print (b)>>> b = 8>>> print (a)>>> print (b)List Comprehensions
List Comprehensions koji se najčešće prevodi na ruski kao apstrakcija lista ili uključivanje liste, to je dio sintakse jezika koji pruža jednostavan način za pravljenje lista.Najlakši posao navesti shvatanja pokazati na primjeru. Recimo da trebate kreirati listu cijelih brojeva iz 0 prije n, gdje n preset. Klasičan način rješavanja ovog problema bi izgledao ovako:
N = int (unos ()) a = za i u opsegu (n): a.dodavanje (i) ispis (a)
Upotreba navesti shvatanja znatno olakšava:
N = int (ulaz ()) a = ispis (a)
ili općenito ovako, u slučaju da više ne trebate koristiti n:
A = ispis (a)
P.S.
Ukoliko ste zainteresovani za temu analize podataka, preporučujemo da se upoznate sa bibliotekom Pande... Na našoj web stranici možete pronaći Sve bibliotečke lekcije Pande prikupljeno u knjizi