Secțiuni de site
Alegerea editorului:
- Crearea unei comenzi rapide pe desktop pentru colegii de clasă
- Dacă pantofii nu se potrivesc cu Aliexpress: acțiunile corecte în acest caz Produsul Aliexpress are mărimea potrivită
- Disputa pe AliExpress Alăturați-vă disputei pe AliExpress
- 3 baze de informații distribuite
- Manager de conținut - responsabilități, salariu, pregătire Dezavantaje și avantaje de a lucra ca specialist în conținut
- Cum să te protejezi de minerit ascuns în browser?
- Recuperarea parolei în Ask
- Cum să pornești camera de pe un laptop
- De ce nu se redă muzica pe VKontakte?
- Cum să măriți dimensiunea unității C în detrimentul unității D fără a pierde date
Publicitate
Nivel avansat. Liste în Python |
În Python, generatoarele simple și generatoarele de liste sunt două lucruri diferite. Există o problemă cu traducerea din engleză. Ceea ce obișnuiam să numim un generator de liste în engleză sună ca „ înțelegerea listei„și nu are nicio legătură cu generatoarele. Cuvântul „înțelegere” (înțelegere, înțelegere) pare a fi în afara subiectului când este tradus în rusă. Se dovedește ceva de genul „înțelegerea listei”. Prin urmare, spunem „generator de liste”, adică prin cuvântul „generator” nu un obiect, ci o construcție sintactică care generează, adică creează, o listă. Pe de altă parte, obiectele generatoare sunt obiecte cu funcții speciale care își păstrează starea între apeluri. Într-o buclă for, ele se comportă ca obiecte iterabile, care includ liste, dicționare, șiruri de caractere etc. Cu toate acestea, generatoarele acceptă metoda __next__(), ceea ce înseamnă că sunt un tip de iterator. O modalitate rapidă de a crea obiecte generatoare relativ simple este expresiile generatoare - expresii generatoare. Sintaxa acestor expresii este similară cu cea a generatoarelor de liste. Cu toate acestea se întorc diferite tipuri obiecte. Primul este un obiect generator. Al doilea este o listă. Să ne uităm mai întâi la generatoarele de liste pentru a ne obișnui cu structura sintactică. Lista generatoareÎn Python, generatoarele de liste vă permit să creați și să completați rapid liste. Construcția sintactică a unui generator de liste presupune prezența unui obiect iterabil sau iterator, pe baza căruia va fi creat noua lista, precum și o expresie care va face ceva cu elementele extrase din secvență înainte de a le adăuga la lista generată. >>> a = [ 1 , 2 , 3 ] >>> b = [ i+10 pentru i în a] >>> a [ 1 , 2 , 3 ] >>> b [ 11 , 12 , 13 ] În exemplul de mai sus, generatorul de liste este expresia. Aici a este un obiect iterabil. În acest caz, este o listă diferită. Fiecare element este preluat dintr-o buclă for. Înainte pentru, este descrisă acțiunea care este efectuată asupra elementului înainte de a fi adăugat la noua listă. Vă rugăm să rețineți că generatorul creează o listă nouă și nu modifică una existentă. Dacă trebuie să modificați variabila curentă, trebuie să îi atribuiți o nouă valoare: >>> a = [ 1 , 2 , 3 ] >>> a = [ i+10 pentru i în a] >>> a [ 11 , 12 , 13 ] Generatoarele de liste sunt clasificate ca „zahăr sintactic” a limbii Programare Python. Cu alte cuvinte, te poți descurca fără ele: >>> pentru index, valoare din enumerarea (a): ... a [ index] = valoare + 10 ... >>> a [ 11 , 12 , 13 ] Dacă un program poate avea mai multe referințe la o listă, generatoarele trebuie utilizate cu atenție: >>> ls0 = [ 1 , 2 , 3 ] >>> ls1 = ls0 >>> ls1.append (4 ) >>> ls0 [ 1 , 2 , 3 , 4 ] >>> ls1 = [ i+1 pentru i în ls1] >>> ls1 [ 2 , 3 , 4 , 5 ] >>> ls0 [ 1 , 2 , 3 , 4 ] Aici presupunem că modificările aduse listei printr-o variabilă vor fi vizibile prin alta. Cu toate acestea, dacă modificați lista cu un generator, variabilele vor indica liste diferite. Obiectul iterat într-o buclă for poate fi mai mult decât o listă. În exemplul de mai jos, liniile dintr-un fișier sunt plasate în listă. >>> linii = [ line.strip () pentru linia deschisă ("text.txt") ] >>> linii [ "unu", "două" , "trei" ] Puteți adăuga o condiție la generatorul de liste: >>> din import aleatoriu randint >>> nums = [ randint(10 , 20 ) pentru i în intervalul (10 ) ] >>> nums [ 18 , 17 , 11 , 11 , 15 , 18 , 11 , 20 , 10 , 19 ] >>> numere = [ i pentru i în numere dacă i%2 == 0 ] >>> numere [ 18 , 18 , 20 , 10 ] Generatoarele de liste pot conține bucle imbricate: >>> a = "12" >>> b = "3" >>> c = "456" >>> comb = [ i+j+k pentru i în a pentru j în b pentru k în c] >> > pieptene [ "134" , "135" , "136" , "234" , "235" , "236" ] Dicționar și generatoare de setDacă înlocuiți parantezele pătrate cu paranteze în expresia generatorului de liste, puteți obține nu o listă, ci un dicționar: >>> a = ( i:i**2 pentru i în intervalul (11, 15) ) >>> a ( 11: 121, 12: 144, 13: 169, 14: 196) În acest caz, sintaxa expresiei înainte de for trebuie să corespundă dicționarului, adică să includă cheia și valoarea separate prin două puncte. Dacă nu este cazul, va fi generat un set: >>> a = ( i pentru i în intervalul (11 , 15 ) ) >>> o mulţime ([ 11 , 12 , 13 , 14 ] ) >>> b = ( 1 , 2 , 3 ) >>> b set ([ 1 , 2 , 3 ] ) GeneratoareExpresiile care creează obiecte generatoare sunt similare cu expresiile care creează liste, dicționare și seturi, cu o singură excepție. Pentru a crea un obiect generator, trebuie să folosiți paranteze: >>> a = (i pentru i în intervalul (2 , 8 ) ) >>> a< generator object < genexpr>la 0x7efc88787910 > >>> pentru i în a: ... imprimați (i) ... 2 3 4 5 6 7 Nu va fi posibil să repetați a doua oară prin generator într-o buclă for, deoarece obiectul generator a generat deja toate valorile în conformitate cu „formula” încorporată în el. Prin urmare, generatoarele sunt de obicei utilizate atunci când trebuie să iterați o dată peste un obiect iterabil. În plus, generatoarele economisesc memorie, deoarece nu stochează toate valorile, de exemplu, unei liste mari, ci doar elementul anterior, limita și formula utilizată pentru a calcula următorul element. Expresia care creează generatorul este o versiune scurtă a următoarelor: >>> def func(start, finish) : ... while start< finish: ... yield start * 0.33 ... start += 1 ... >>> a = func(1 , 4 ) >>> a< generator object func at 0x7efc88787a50 >>>> pentru i în a: ... imprimați (i) ... 0,33 0,66 0,99 Dacă nu trebuie să utilizați o funcție de mai multe ori, este mai ușor să utilizați o expresie: >>> b = (i*0,33 pentru i în intervalul (1 , 4 ) ) >>> b< generator object < genexpr>la 0x7efc88787960 > >>> pentru i în b: ... imprimați (i) ... 0,33 0,66 0,99 | |Listele de înțelegere vă permit să creați rapid o listă bazată pe listele existente. Folosind un generator, puteți construi o listă bazată pe orice tip de date iterabile (de exemplu, șiruri sau tupluri). Ca rezultat, bucla va crea aceeași listă: ["8", "h", "o", "s", "t"] Expresii condiționate în generatoarele de listeGeneratorii de liste pot folosi expresii condiționate pentru a modifica listele existente sau alte tipuri de date secvențiale, rezultând o nouă listă. Să ne uităm la un generator cu o declarație if: fish_tuple = ("pește suflat", "pește clovn", "pește somn", "caracatiță") Lista folosește tuplul fish_tuple ca bază pentru o nouă listă de pești. Cuvintele cheie pentru și în sunt utilizate în același mod ca în dimensiunea anterioară. În plus, generatorul conține o instrucțiune if, care îl face să excludă șirul „caracatiță” din listă. Interogați conținutul fish_list și asigurați-vă că acesta conține toate elementele fish_tuple, cu excepția „octopus”. ["blowfish", "clownfish", "somn"] După cum puteți vedea, folosind o expresie condiționată puteți exclude un anumit element din noua listă. Acum să ne uităm la un alt exemplu care utilizează operații matematice, numere și metoda range().
Citeste si: Noua listă number_list va conține valorile pătrate ale fiecărui element par în intervalul 0-9. Rezultatul va fi o listă ca aceasta: Să ne uităm la acest exemplu pas cu pas. Dacă în loc de x ** 2 pentru x folosim doar x pentru x, lista va arăta astfel: listă_număre = După aceasta, la generator a fost adăugată o expresie condiționată: listă_număre = Declarația if a eliminat toate numerele impare din listă. Acum tot ce rămâne este să adăugați un operator care va pătra toate elementele: listă_număre = Acum fiecare element al listei va fi pătrat. De asemenea, puteți utiliza instrucțiuni imbricate if în generatoare: listă_număre = Astăzi voi vorbi despre un tip de date precum liste, operații asupra acestora și metode, despre generatoarele de liste și utilizarea listelor. Ce sunt listele?Listele în Python sunt colecții ordonate, mutabile de obiecte de tipuri arbitrare (la fel ca o matrice, dar tipurile pot diferi). Pentru a utiliza liste, trebuie să le creați. Există mai multe moduri de a crea o listă. De exemplu, puteți procesa orice obiect iterabil (de exemplu, ) cu o funcție încorporată listă: >>> listă („listă”) ["listă"]De asemenea, puteți crea o listă folosind un literal: >>> s = # Lista goală >>> l = [ "s" , "p" , [ "isok" ], 2 ] >>> s >>> l ["s", "p", ["isok „], 2]După cum puteți vedea din exemplu, lista poate conține orice număr de obiecte (inclusiv liste imbricate) sau nu poate conține nimic. Și un alt mod de a crea o listă este generatoare de liste. Un generator de liste este o modalitate de a construi o nouă listă prin aplicarea unei expresii fiecărui element al unei secvențe. Generatoarele de liste sunt foarte asemănătoare cu o buclă. >>> c = [ c * 3 pentru c în "listă" ] >>> c ["lll", "iii", "sss", "ttt"]Este posibil și un design mai complex al generatorului de liste: >>> c = [ c * 3 pentru c în "listă" dacă c != "i" ] >>> c ["lll", "sss", "ttt"] >>> c = [ c + d pentru c în „listă” dacă c != „i” pentru d în „spam” dacă d != „a” ] >>> c ["ls", "lp", "lm", "ss", "sp", "sm", "ts", "tp", "tm"]Dar în cazuri dificile este mai bine să folosiți obișnuitul pentru buclă pentru a genera liste. Enumeră funcțiile și metodeleCreați creat, acum trebuie să faceți ceva cu lista. Metodele de bază și de listă sunt disponibile pentru liste. Tabelul „Listă metode”
Trebuie remarcat faptul că metodele listă, spre deosebire de , modifică lista însăși și, prin urmare, rezultatul execuției nu trebuie să fie scris în această variabilă. >>> l = [ 1 , 2 , 3 , 5 , 7 ] >>> l . sort() >>> l >>> l = l . sort() >>> print(l) NiciunaȘi, în sfârșit, exemple de lucru cu liste: >>> a = [ 66,25 , 333 , 333 , 1 , 1234,5 ] >>> print ( a . număr ( 333 ), a . număr ( 66,25 ), a . număr ( " x " )) 2 1 0 >>> o. introduceți (2 , - 1 ) >>> a . anexează (333 ) >>> a >>> a . indice (333 ) 1 >>> a . elimina (333 ) >>> a >>> a . invers () >>> a >>> a . sort() >>> a [-1, 1, 66.25, 333, 333, 1234.5]Ocazional, pentru a crește productivitatea, listele sunt înlocuite cu altele mult mai puțin flexibile Limbajul de programare Pyrhon are o structură sintactică specială care vă permite să creați liste completate pe baza anumitor reguli. Listele generate pot fi diferite, conținutul structurii poate fi diferit, motiv pentru care se numesc generatoare de liste. Sunt convenabile deoarece intrările nu sunt atât de lungi ca în metoda tradițională de creare a listelor. De exemplu, aveți nevoie de o listă de numere naturale până la un anumit număr. Metoda tradițională ar arăta astfel: >>> a = >>> pentru i în intervalul(1,15): ... a.apend(i) ... >>>Lista avea trei linii de cod. Și generatorul are nevoie doar de unul: >>> a = >>> aConstrucția este un generator de liste. Toate modelele trebuie plasate în liste pătrate, ceea ce reflectă crearea listei. Există trei părți în interiorul parantezelor:
Să ne uităm la un exemplu>>> a = >>> b = >>> bÎn această situație, luăm fiecare element din listă și îl pătram. De aici:
Aici luăm cheia în dicționar, iar produsul cheii și valoarea sa existentă este inclus în lista generată. >>> a = (1:10, 2:20, 3:30) >>> b = [] pentru i în a] >>> b [, , ] >>> c = >>> cÎn acest caz, lista b conține liste imbricate. Omiterea parantezelor pătrate din expresia ] din generator ar duce la o eroare. Dacă doriți o listă cu un singur nivel cu chei din valorile de dicționar, trebuie să luați fiecare listă imbricată și să luați fiecare componentă de acolo. Acest lucru se face cu un construct imbricat. Sintaxa tradițională pentru generarea unei liste este următoarea: >>> c = >>> pentru i în b: ... pentru j în i: ... c.append(j) ... >>> cGeneratoarele de liste pot fi completate cu un construct if. De exemplu, trebuie să extrageți toate numerele dintr-un șir: >>> a = "lsj94ksd231 9" >>> b =Sau completați lista cu numere care sunt multipli de 31 sau 30: >>> a = >>> aCrearea listelor în acest fel este mult mai ușoară și mai rapidă. Dar nu sunt potrivite pentru înlocuirea structurilor destul de complexe. De exemplu, dacă condiția de verificare conține o ramură else. Rămâneți fără bani și mai sunt câteva săptămâni până la ziua de plată? Îl poți împrumuta, dar dacă nu ai pe nimeni? Nu mergeți la bancă pentru un împrumut. În acest caz, microcreditele vă vor ajuta. Doar intră pe site, completează o aplicație (este foarte simplă și rapidă) și în câteva minute vei primi banii! Este foarte convenabil și rapid și, cel mai important, nu trebuie să întrebi pe nimeni! Fiecare limbaj de programare are o astfel de caracteristică, o structură complexă, dar un lucru special simplificat. Dacă ați scris anterior într-o altă limbă, este posibil să nu acordați atenție acestui lucru, deoarece dvs limba veche nu a simplificat atât de mult chestia asta (pentru că era foarte ocupat să simplifice un alt lucru). În acest capitol, veți învăța generatoare de liste, dicționar și set - trei concepte înrudite centrate în jurul unei tehnologii foarte puternice. Dar mai întâi, vreau să fac un mic ocol pentru a vă spune despre două module care vă vor ajuta să navigați în sistemul dvs. de fișiere local. Lucrul cu fișiere și directoarePython 3 vine cu un modul os, ceea ce înseamnă " sistem de operare" conține multe funcții pentru obținerea de informații despre directoare locale, fișiere, procese și variabile de mediu(și în unele cazuri, pentru a le manipula). Python oferă un foarte bun unificat interfata software Pentru toate sistemele de operare acceptate, astfel încât programele dvs. să poată rula pe orice computer cu o cantitate minimă de cod dependent de platformă. Director de lucru curentCând începi pentru prima dată să înveți Python, petreci mult timp shell interactiv Python. Pe parcursul acestei cărți, veți vedea exemple care arată astfel:
Există întotdeauna un director de lucru curent. Dacă nu știți nimic despre directorul de lucru curent, atunci este posibil ca pasul 1 să eșueze și să arunce o excepție precum ImportError. De ce? Deoarece Python va căuta modulul specificat în căile de căutare ale operatorilor import, dar nu îl va găsi deoarece directorul de exemple nu se află în calea de căutare. Pentru a remedia acest lucru, puteți face unul dintre cele două lucruri:
Directorul de lucru curent este un parametru implicit pe care Python îl păstrează în memorie în orice moment. Directorul de lucru curent este întotdeauna acolo când lucrați în shell-ul interactiv Python, rulând scriptul dvs. de la linie de comandă sau un script CGI undeva pe un server web. Modul os conține două funcții pentru lucrul cu directorul de lucru curent.
Lucrul cu nume de fișiere și directoareÎntrucât vorbim de directoare, vreau să vă atrag atenția asupra modulului os.cale. Conține funcții pentru lucrul cu nume de fișiere și directoare.
Modul os.cale conține, de asemenea, funcții pentru împărțirea căilor fișierelor, numelor de foldere și fișierelor în părțile lor componente.
Obținerea conținutului directoruluiModulul glob înțelege caracterele wildcard utilizate în shell-uri. Modul glob este un alt instrument din biblioteca standard Python. Este o modalitate ușoară de a obține în mod programatic conținutul unui folder și, de asemenea, folosește metacaractere, cu care probabil ești familiarizat dacă ai lucrat pe linia de comandă.
Obținerea de informații despre un fișierOrice sistem de operare modern stochează informații despre fiecare fișier (metadate): data creării, data ultimei modificări, dimensiunea fișierului etc. Python oferă un singur interfata software pentru a accesa aceste metadate. Nu trebuie să deschideți fișierul; tot ceea ce este necesar este un nume de fișier.
Obținerea de căi absoluteÎn secțiunea anterioară funcția glob.glob() a returnat o listă de căi relative. În primul exemplu, căile arătau ca „examples\feed.xml” , iar în al doilea căile relative erau chiar mai scurte, de exemplu, „romantest1.py” . Atâta timp cât rămâneți în directorul de lucru actual, aceste căi relative vă vor permite să deschideți fișiere sau să le preluați metadatele. Dar dacă doriți să obțineți o cale absolută - adică una care include toate numele de director până la rădăcină sau până la litera unității, veți avea nevoie de funcția os.path.realpath(). >>> import os c:\Utilizatori\pelgrim\diveintopython3\examples\feed.xml Lista generatoarePuteți utiliza orice expresie Python în generatoarele de liste. Cu generatoarele de liste, puteți mapa cu ușurință o listă la alta, aplicând o anumită funcție fiecărui element.
Generatoarele de liste pot folosi orice expresie Python, inclusiv funcțiile modulului os, folosit pentru a lucra cu fișiere și directoare.
Când generați liste, puteți, de asemenea, să filtrați elemente pentru a elimina unele valori.
Toate exemplele de generatoare de liste discutate au folosit expresii simple: înmulțirea unui număr cu o constantă, apelarea unei singure funcții sau pur și simplu returnarea unui element de listă neschimbat (după filtrare). Dar atunci când generați liste, puteți utiliza expresii de orice complexitate.
Dicţionar generatorsUn generator de dicționar este similar cu un generator de liste, dar în loc de o listă, creează un dicționar.
La fel ca în generatoarele de liste, puteți include o condiție în generatoarele de dicționar dacă pentru a filtra secvența de intrare folosind o expresie condiționată care este evaluată pentru fiecare element.
|
Citire: |
---|
Popular:
Nou
- Dacă pantofii nu se potrivesc cu Aliexpress: acțiunile corecte în acest caz Produsul Aliexpress are mărimea potrivită
- Disputa pe AliExpress Alăturați-vă disputei pe AliExpress
- 3 baze de informații distribuite
- Manager de conținut - responsabilități, salariu, pregătire Dezavantaje și avantaje de a lucra ca specialist în conținut
- Cum să te protejezi de minerit ascuns în browser?
- Recuperarea parolei în Ask
- Cum să pornești camera de pe un laptop
- De ce nu se redă muzica pe VKontakte?
- Cum să măriți dimensiunea unității C în detrimentul unității D fără a pierde date
- Cauzele defecțiunilor de pe placa de bază Dacă chipsetul de pe placa de bază se arde