16 Python One-Liners utile pentru a simplifica sarcinile comune

Doriți să scrieți cod elegant și Pythonic? Iată o listă de versiuni Python utile pentru a efectua sarcini simple.

Dacă sunteți un programator Python începător, veți petrece timp înțelegând structurile de date de bază, cum ar fi listele și șirurile de caractere. Și unele operațiuni asupra acestor structuri de date pot fi realizate prin fragmente de cod concise de o linie.

În calitate de programator, ar trebui să acordați prioritate lizibilității și mentenabilității față de scurtarea codului. Dar Python este ușor să vină cu o linie care urmează bunele practici de codare.

În acest articol, ne vom concentra pe o singură linie pentru sarcini simple de procesare a listelor și a șirurilor în Python.

Să începem!

Generați o listă de numere

Cea mai simplă modalitate de a genera o listă de numere este utilizarea funcției range(). Funcția range() returnează un obiect interval pe care îl puteți transforma într-o listă. Utilizarea range(num) va da secvența 0, 1, 2,.., num-1.

>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Mai multe despre utilizarea funcției range().

De asemenea, puteți utiliza funcția range() împreună cu o valoare de pas opțională. Deci intervalul (start, end, step) va da secvenței început, start + pas, start + 2*pas și așa mai departe. Ultima valoare va fi start + k*pas astfel încât (start + k*step) < sfârșit și (start + (k+1)*pas) > final.

Găsiți valorile maxime și minime într-o listă

Puteți utiliza funcțiile max și min încorporate pentru a calcula elementele maxime și, respectiv, minime dintr-o listă.

>>> min_elt, max_elt = min(nums), max(nums)
>>> min_elt
0
>>> max_elt
9

📑 Notă privind atribuirea multiplă

  Iată cum să o faci rapid

Observați că am atribuit valori atât min_elt, cât și max_elt într-o singură instrucțiune de atribuire. Python acceptă astfel de atribuiri multiple. Și acest lucru poate fi util atunci când despachetați iterabile și atribuiți valori mai multor variabile în același timp.

Eliminați duplicatele dintr-o listă

O altă operațiune comună este eliminarea duplicatelor din listele Python. Acest lucru este necesar atunci când trebuie să lucrați doar cu valorile unice. Cel mai simplu mod de a face acest lucru este să convertiți lista într-un set.

Un set este o structură de date încorporată ale cărei elemente sunt toate unice și hashable.

>>> nums1 = [2,4,7,9,7,10]

În nums1, elementul 7 apare de două ori. Turnarea acestuia într-un set va elimina duplicatul (aici, 7), lăsându-ne cu o listă de valori unice.

Deoarece mai trebuie să lucrăm cu lista, vom converti setul înapoi într-o listă. Această operație poate fi realizată cu următoarea linie de cod:

>>> nums1 = list(set(nums1))
>>> nums1
[2, 4, 7, 9, 10]

📒 Pentru a afla mai multe despre alte tehnici de eliminare a duplicatelor din listele Python, consultați acest ghid.

Numărați aparițiile dintr-o listă

Pentru a număra de câte ori apare un element într-o listă, puteți utiliza metoda încorporată count(). list.count(elt) returnează numărul de ori elt apare în listă.

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Aici, 7 apare o dată în lista de numere, deci metoda count() returnează 1.

>>> nums.count(7)
1

Verificați dacă toate elementele din listă satisfac o condiție

Pentru a verifica dacă toate elementele dintr-o listă îndeplinesc o condiție, puteți utiliza funcția încorporată all() din Python.

Funcția all() ia un iterabil ca argument și returnează True dacă toate elementele din iterabil evaluează la True (sau sunt adevărate).

Aici, am dori să verificăm dacă toate elementele din lista nums2 sunt impare.

>>> nums2 = [3,4,7,11,21,67,12]

Putem folosi lista de înțelegere pentru a construi o listă de booleeni și putem trece în lista respectivă ca argument pentru funcția all().

Aici, num%2!=0 va fi Fals pentru elementele 4 și 12 care sunt pare. Prin urmare, lista de booleeni construită folosind expresia de înțelegere a listei conține False (și all(list) returnează False).

>>> all([num%2!=0 for num in nums2])
False

💡 Este important să rețineți că toate([]) (toate(orice-vide-iterabile) returnează Adevărat.

Verificați dacă vreun element din listă satisface o condiție

Pentru a verifica dacă vreun element dintr-o listă îndeplinește o condiție, puteți utiliza funcția any(). any(some-list) returnează True dacă cel puțin un element este evaluat la True.

>>> nums2 = [3,4,7,11,21,67,12]

Ca și în exemplul anterior, folosim înțelegerea listelor pentru a obține o listă de booleeni. Lista de numere conține numere pare. Deci, funcția any() returnează True.

>>> any([num%2 for num in nums2])
True

Inversați un șir

În Python, șirurile sunt imuabile, așa că atunci când doriți să inversați un șir, puteți obține doar o copie inversată a șirului. Există două abordări comune – ambele pot fi scrise ca Python one-liners – care folosesc string slicing și funcții încorporate.

  10 cele mai bune jocuri de vânătoare pentru a experimenta fiorul unei urmăriri

Folosind String Slicing

Tăierea șirului cu valori negative ale pasului returnează o felie a șirului începând de la sfârșit. Sintaxa este șir[start:stop:step]. Deci, ce se întoarce setarea pasului -1 și ignorarea indicilor de start și stop?

Returnează o copie a șirului, începând de la sfârșitul șirului, inclusiv fiecare caracter.

>>> str1[::-1]
'olleh'

Folosind funcția inversă().

Funcția încorporată reversed() returnează un iterator invers pe o secvență.

>>> reversed(str1)
<reversed object at 0x008BAF70>
>>> for char in str1:
...     print(char)
...
h
e
l
l
o

Îl puteți folosi împreună cu metoda join(), după cum se arată:

>>> ''.join(reversed(str1))
'olleh'

Convertiți un șir într-o listă de caractere

Să presupunem că am dori să împărțim un șir într-o listă de caractere. Putem face acest lucru folosind expresia de înțelegere a listei.

>>> str1 = 'hello'

Listele de înțelegere sunt una dintre cele mai puternice versiuni unice din Python.

📒 Aflați mai multe despre înțelegerea listelor în Python.

Facem bucla prin șir și colectăm fiecare caracter.

>>> chars = [char for char in str1]
>>> chars
['h', 'e', 'l', 'l', 'o']

Pentru a împărți un șir mai lung într-o listă de șiruri la fiecare apariție a spațiului alb, puteți utiliza metoda split().

>>> str2 = 'hello world'
>>> str2.split()
['hello', 'world']

Am văzut deja cum să folosim înțelegerea listei pentru a împărți un șir într-o listă de caractere. În acel exemplu, am colectat toate caracterele prin bucla prin șir.

Aici, trebuie să parcurgem șirul și să colectăm doar cifrele. Deci cum facem asta?

  • Putem seta condiția de filtrare în expresia de înțelegere a listei folosind metoda isdigit().
  • c.isdigit() returnează adevărat dacă c este o cifră; altfel se întoarce False.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

Verificați dacă un șir începe cu un subșir specific

Pentru a verifica dacă un șir începe cu un anumit subșir, puteți utiliza metoda startswith() șir. str1.startswith(subșir) returnează adevărat dacă str1 începe cu subșir. În caz contrar, returnează False.

Iată câteva exemple:

>>> str4 = 'coding'
>>> str4.startswith('co')
True
>>> str5 = 'python'
>>> str5.startswith('co')
False

Verificați dacă un șir se termină cu un subșir specific

După cum probabil ați ghicit, pentru a verifica dacă un șir se termină cu un subșir dat, puteți utiliza metoda endswith().

>>> str5 = 'python'
>>> str5.endswith('on')
True

De asemenea, putem folosi metoda șirurilor în interiorul unei expresii de înțelegere a listei pentru a obține ends_with, o listă de booleeni.

>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs]
>>> ends_with
[True, True, False, True]

Uniți elementele unei liste într-un șir

Am văzut deja cum să împărțim un șir într-o listă de caractere. Acum, cum facem operația inversă de unire a elementelor unei liste într-un șir?

  Cum să partajați bateria pe iPhone

Pentru a face acest lucru, puteți utiliza metoda șir join() cu sintaxa: separator.join(some-list).

Am dori doar să combinăm elementele din listă într-un singur șir; nu avem nevoie de niciun separator. Deci setăm separatorul la un șir gol.

>>> list_1 = ['p','y','t','h','o','n','3']
>>> ''.join(list_1)
'python3'

Creați un dicționar Python

Așa cum listele de înțelegere ne pot ajuta să construim liste noi din iterabile existente, înțelegerile de dicționar ne pot ajuta să construim noi dicționare din iterabile existente.

Comprehensiunile dicționarului Python sunt linii puternice care pot ajuta la construirea unui dicționar din mers.

Aici, avem nume care sunt o listă de șiruri.

>>> names = ['Joe','Amy','Jake','Florence']

Creăm names_d, un dicționar care conține șiruri de nume ca chei și lungimile șirurilor ca valoare.

>>> names_d = {name:len(name) for name in names}
>>> names_d
{'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}

Atribuiți condiționat variabilelor valori

Uneori poate fi necesar să atribuiți valori variabilelor în funcție de o anumită condiție.

De exemplu, ați putea citi în datele introduse de utilizator, să zicem vârsta individului. Și în funcție de valoarea de intrare, puteți decide dacă au sau nu permisiunea de a participa la o petrecere.

Pentru a face această atribuire condiționată în Python, puteți scrie următoarea linie folosind operatorul ternar.

>>> age = 21
>>> allowed = True if age >= 18 else False
>>> allowed
True

🔖 Aflați mai multe despre operatorul ternar din Python.

Generați toate permutările

Permutarea se referă la o posibilă aranjare a elementelor într-un grup. Dacă există n elemente unice într-un grup, sunt n! modalități posibile de a le aranja — și, prin urmare, n! permutări.

Să folosim următoarele litere de listă:

>>> letters = ['a','b','c']

Puteți utiliza permutările din modulul itertools pentru a genera toate permutările posibile ale iterabilului dat.

>>> letters_p = permutations(letters)
>>> letters_p
<itertools.permutations object at 0x0127AF50>

După cum s-a văzut, utilizarea permutărilor (iterabile) returnează un obiect de permutare prin care putem parcurge folosind o buclă for:

>>> for p in letters_p:
...     print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

Dar o putem rescrie ca expresie cu o singură linie prin turnarea obiectului permutare într-o listă:

>>> letters_p = list(permutations(letters))
>>> letters_p
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Aici, există trei elemente unice și există 3!=6 permutări posibile.

Generați subseturi ale unei liste

Uneori poate fi necesar să construiți toate subseturile posibile de o anumită dimensiune dintr-o listă sau alte iterabile. Să folosim lista de litere și să obținem toate sublistele de dimensiunea 2.

Pentru a face acest lucru, putem folosi combinații din modulul itertools, astfel:

>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2))
>>> letters_2
[('a', 'b'), ('a', 'c'), ('b', 'c')]

Concluzie

În acest tutorial, ne-am uitat la Python one-line-uri utile pentru a efectua operațiuni comune pe liste și șiruri. Am învățat, de asemenea, versuri unice, cum ar fi lista Python și înțelegerea dicționarului și cum să le folosim împreună cu funcțiile încorporate pentru a îndeplini sarcinile dorite.

Ca pas următor, consultați această listă de proiecte Python pentru începători.