Želite li pisati elegantan i pitoničan kod? Evo liste korisnih jednolinijskih Python naredbi za izvršavanje jednostavnih zadataka.
Ako ste početnik u Python programiranju, provest ćete neko vreme u razumevanju osnovnih struktura podataka, kao što su liste i stringovi. Određene operacije s ovim strukturama podataka mogu se postići sažetim, jednolinijskim kodom.
Kao programer, trebali biste davati prednost čitljivosti i održavanju koda u odnosu na njegovo skraćivanje. Međutim, u Pythonu je lako napisati jednolinijski kod koji prati dobre prakse programiranja.
U ovom članku ćemo se fokusirati na jednolinijske naredbe za jednostavne zadatke obrade listi i stringova u Pythonu.
Počnimo!
Stvaranje liste brojeva
Najjednostavniji način za generiranje liste brojeva je korištenje funkcije `range()`. Funkcija `range()` vraća objekt raspona koji se može pretvoriti u listu. Korištenjem `range(num)` dobit ćete niz 0, 1, 2, …, num-1.
>>> nums = list(range(10)) >>> nums [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Više o korištenju funkcije `range()`.
Možete koristiti funkciju `range()` zajedno s opcionalnom vrednošću koraka. Dakle, `range(start, end, step)` će dati niz `start`, `start + step`, `start + 2*step`, i tako dalje. Poslednja vrednost će biti `start + k*step` tako da je `(start + k*step) < end` i `(start + (k+1)*step) > end`.
Pronalaženje maksimalnih i minimalnih vrednosti u listi
Možete koristiti ugrađene funkcije `max` i `min` za izračunavanje maksimalnog i minimalnog elementa u listi, respektivno.
>>> min_elt, max_elt = min(nums), max(nums) >>> min_elt 0 >>> max_elt 9
📑 Napomena o višestrukim dodelama
Primijetite da smo dodelili vrednosti i `min_elt` i `max_elt` u jednoj naredbi dodeljivanja. Python podržava takve višestruke dodjele. To može biti korisno kada se raspakuju iterabilni objekti i dodeljuju vrednosti većem broju varijabli u isto vreme.
Uklanjanje duplikata iz liste
Još jedna uobičajena operacija je uklanjanje duplikata iz Python lista. To je neophodno kada trebate raditi samo s jedinstvenim vrednostima. Najjednostavniji način da to učinite je pretvaranje liste u skup.
Skup je ugrađena struktura podataka u kojoj su svi elementi jedinstveni i hešibilni.
>>> nums1 = [2,4,7,9,7,10]
U `nums1`, element 7 se pojavljuje dva puta. Pretvaranje u skup će ukloniti duplikat (ovde, 7) ostavljajući nam listu jedinstvenih vrednosti.
Budući da još uvek trebamo raditi s listom, pretvorit ćemo skup natrag u listu. Ova operacija se može izvršiti pomoću sledeće linije koda:
>>> nums1 = list(set(nums1)) >>> nums1 [2, 4, 7, 9, 10]
📒 Da biste saznali više o drugim tehnikama za uklanjanje duplikata iz Python lista, pogledajte ovaj vodič.
Brojanje pojavljivanja u listi
Da biste prebrojali koliko se puta element pojavljuje u listi, možete koristiti ugrađenu metodu `count()`. `list.count(elt)` vraća koliko se puta `elt` pojavljuje u listi.
>>> nums [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Ovde se 7 pojavljuje jednom u listi brojeva, tako da metoda `count()` vraća 1.
>>> nums.count(7) 1
Provera zadovoljava li svaki element u listi određeni uslov
Da biste proverili zadovoljava li svaki element u listi određeni uslov, možete koristiti Pythonovu ugrađenu funkciju `all()`.
Funkcija `all()` uzima iterabilni objekat kao argument i vraća `True` ako se svi elementi u iterabilnom objektu procene kao istiniti.
Ovde bismo želeli proveriti jesu li svi elementi u listi `nums2` neparni.
>>> nums2 = [3,4,7,11,21,67,12]
Možemo koristiti list comprehension da stvorimo listu Booleovih vrednosti i proslediti tu listu kao argument funkciji `all()`.
Ovde će `num%2!=0` biti netačno za elemente 4 i 12 koji su parni. Stoga, lista Booleovih vrednosti konstruirana korišćenjem izraza za razumevanje liste sadrži `False` (a `all(list)` vraća `False`).
>>> all([num%2!=0 for num in nums2]) False
💡 Važno je napomenuti da `all([])` (tj. `all` s bilo kojim praznim iterabilnim objektom) vraća `True`.
Provera zadovoljava li bilo koji element u listi određeni uslov
Da biste proverili zadovoljava li bilo koji element u listi određeni uslov, možete koristiti funkciju `any()`. `any(neka_lista)` vraća `True` ako je barem jedan element procenjen kao istinit.
>>> nums2 = [3,4,7,11,21,67,12]
Kao i u prethodnom primeru, koristimo list comprehension da dobijemo listu Booleovih vrednosti. Lista brojeva sadrži parne brojeve. Dakle, funkcija `any()` vraća `True`.
>>> any([num%2 for num in nums2]) True
Obrtanje stringa
U Pythonu su stringovi nepromenljivi, tako da kada želite obrnuti string, možete dobiti samo obrnutu kopiju stringa. Postoje dva uobičajena pristupa—od kojih se oba mogu napisati kao jednolinijski Python kod—koji koriste slicing stringova i ugrađene funkcije.
Korištenje string slicinga
Slicing stringa s negativnim vrednostima koraka vraća deo niza počevši od kraja. Sintaksa je `string[start:stop:step]`. Dakle, što se vraća postavljanjem koraka na -1 i ignoriranjem indeksa start i stop?
Vraća kopiju stringa, počevši od kraja stringa—uključujući svaki znak.
>>> str1[::-1] 'olleh'
Korištenje funkcije `reversed()`
Ugrađena funkcija `reversed()` vraća obrnuti iterator preko sekvence.
>>> reversed(str1) <reversed object at 0x008BAF70> >>> for char in str1: ... print(char) ... h e l l o
Možete je koristiti zajedno s metodom `join()`, kao što je prikazano:
>>> ''.join(reversed(str1)) 'olleh'
Pretvaranje stringa u listu znakova
Pretpostavimo da želimo podeliti string u listu znakova. To možemo učiniti pomoću izraza za razumevanje liste.
>>> str1 = 'hello'
List comprehension je jedna od najmoćnijih jednolinijskih naredbi u Pythonu.
📒 Saznajte više o razumevanju liste u Pythonu.
Prolazimo kroz niz znak po znak i skupljamo svaki znak.
>>> chars = [char for char in str1] >>> chars ['h', 'e', 'l', 'l', 'o']
Da biste podelili duži string u listu stringova pri svakom pojavljivanju razmaka, možete koristiti metodu `split()`.
>>> str2 = 'hello world' >>> str2.split() ['hello', 'world']
Već smo videli kako koristiti list comprehension da podelimo string u listu znakova. U tom primeru smo skupili sve znakove petljom kroz niz.
Ovde trebamo proći kroz niz i skupiti samo cifre. Dakle, kako to da uradimo?
- Možemo postaviti uslov filtriranja u izrazu za razumevanje liste pomoću metode `isdigit()`.
- `c.isdigit()` vraća `True` ako je `c` cifra; inače vraća `False`.
>>> str3 = 'python3' >>> digits = [c for c in str3 if c.isdigit()] >>> digits ['3']
Provera počinje li string određenim podnizom
Da biste proverili počinje li string određenim podnizom, možete koristiti metodu stringa `startswith()`. `str1.startswith(podniz)` vraća `True` ako `str1` počinje s `podniz`. U suprotnom, vraća `False`.
Evo nekoliko primera:
>>> str4 = 'coding' >>> str4.startswith('co') True
>>> str5 = 'python' >>> str5.startswith('co') False
Provera završava li string određenim podnizom
Kao što ste možda pretpostavili, da biste proverili završava li string zadatim podnizom, možete koristiti metodu `endswith()`.
>>> str5 = 'python' >>> str5.endswith('on') True
Takođe možemo koristiti metodu string unutar izraza za razumevanje liste da dobijemo listu Booleovih vrednosti `ends_with`.
>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs] >>> ends_with [True, True, False, True]
Spajanje elemenata liste u string
Već smo videli kako podeliti string na listu znakova. Kako sada uraditi obrnutu operaciju spajanja elemenata liste u string?
Da biste to učinili, možete koristiti metodu stringa `join()` sa sintaksom: `separator.join(neka_lista)`.
Želimo samo kombinirati elemente u listi u jedan string; ne treba nam nikakav separator. Dakle, postavljamo separator na prazan string.
>>> list_1 = ['p','y','t','h','o','n','3'] >>> ''.join(list_1) 'python3'
Stvaranje Python rečnika
Baš kao što nam list comprehension može pomoći da stvorimo nove liste iz postojećih iterabilnih objekata, dictionary comprehension nam može pomoći da stvorimo nove rečnike iz postojećih iterabilnih objekata.
Razumevanje Python rečnika su moćne jednolinijske naredbe koje mogu pomoći u konstrukciji rečnika u hodu.
Ovde imamo imena koja su lista stringova.
>>> names = ['Joe','Amy','Jake','Florence']
Stvaramo `names_d`, rečnik koji sadrži stringove imena kao ključeve i dužine stringova kao vrednosti.
>>> names_d = {name:len(name) for name in names} >>> names_d {'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}
Uslovno dodeljivanje vrednosti varijablama
Ponekad ćete možda trebati dodeliti vrednosti varijablama u zavisnosti od određenog uslova.
Na primer, možete pročitati unos korisnika, recimo, starost pojedinca. I, ovisno o ulaznoj vrednosti, možete odlučiti je li im dopušteno prisustvovati zabavi ili ne.
Da biste izvršili ovo uslovno dodeljivanje u Pythonu, možete napisati sledeću jednolinijsku naredbu koristeći ternarni operator.
>>> age = 21 >>> allowed = True if age >= 18 else False >>> allowed True
🔖 Saznajte više o ternarnom operatoru u Pythonu.
Generisanje svih permutacija
Permutacija se odnosi na mogući raspored elemenata u grupi. Ako postoji n jedinstvenih elemenata u grupi, postoji n! mogući načini da ih uredite—i otuda, n! permutacija.
Koristimo sledeću listu slova:
>>> letters = ['a','b','c']
Možete koristiti `permutations` iz modula `itertools` da biste generisali sve moguće permutacije datog iterabilnog objekta.
>>> letters_p = permutations(letters) >>> letters_p <itertools.permutations object at 0x0127AF50>
Kao što se vidi, korištenje `permutations(iterabilni_objekt)` vraća objekt permutacije kroz koji možemo proći koristeći `for` petlju:
>>> 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')
Ali, možemo to prepisati kao izraz u jednoj liniji tako što ćemo objekt permutacije pretvoriti u listu:
>>> 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')]
Ovde postoje tri jedinstvena elementa, i postoji 3!=6 mogućih permutacija.
Generisanje podskupova liste
Ponekad ćete možda trebati konstruisati sve moguće podskupove određene veličine iz liste ili drugih iterabilnih objekata. Koristimo listu slova i dobijemo sve podliste veličine 2.
Da bismo to učinili, možemo koristiti `combinations` iz modula `itertools`, na primer:
>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2)) >>> letters_2 [('a', 'b'), ('a', 'c'), ('b', 'c')]
Zaključak
U ovom tutorijalu, pogledali smo korisne Python jednolinijske naredbe za obavljanje uobičajenih operacija nad listama i stringovima. Takođe smo naučili jednolinijske izraze poput Pythonovog razumevanja listi i rečnika i kako ih koristiti u kombinaciji s ugrađenim funkcijama za obavljanje željenih zadataka.
Kao sledeći korak, pogledajte ovu listu Python projekata prilagođenih početnicima.