Për të gjeneruar një listë të re nga një listë (array) elementët e së cilës janë vargje, duke nxjerrë vetëm elementet e vargjeve që plotësojnë kushte të caktuara, ose duke kryer zëvendësime, konvertime, etj., përdorni kuptimet e listave.
Pas një shpjegimi të shkurtër të të kuptuarit të listës, përmbajtja e mëposhtme shpjegohet me kodin e mostrës.
- Nxjerrja bazuar në përfshirjen ose jo të një vargu specifik (përputhje e pjesshme)
- Zëvendësoni vargun specifik
- Ekstraktoni duke filluar ose jo me një varg specifik
- Nxjerrja duke përfunduar ose jo me një varg specifik
- Gjykuar dhe nxjerrë sipas rastit
- Konvertoni shkronjat e mëdha dhe të vogla
- Përcakton nëse përdoren karaktere alfabetike apo numerike dhe i nxjerr ato
- Kushtet e shumëfishta
- shprehje e rregullt (kompjuterike).
Vini re se listat mund të ruajnë lloje të ndryshme të dhënash dhe janë rreptësisht të ndryshme nga grupet. Nëse dëshironi të trajtoni vargje në procese që kërkojnë madhësinë e memories dhe adresat e memories ose përpunimin numerik të të dhënave të mëdha, përdorni grup (bibliotekë standarde) ose NumPy.
- shënimi i përfshirjes së listës
- Përmban një varg specifik (përputhje e pjesshme) \ Nuk përmban:in
- Zëvendësoni vargun specifik
- Fillon me një varg specifik \ nuk fillon:startswith()
- Përfundon me një varg karakteresh të veçantë \ jo fund:endswith()
- Gjykuar dhe nxjerrë sipas rastit
- Konvertoni shkronjat e mëdha dhe të vogla
- Përcakton nëse përdoren karaktere alfabetike apo numerike dhe i nxjerr ato
- Kushtet e shumëfishta
- shprehje e rregullt (kompjuterike).
shënimi i përfshirjes së listës
Kur krijoni një listë të re nga një listë, kuptimi i listës është më i thjeshtë për t’u shkruar sesa për sythe.
[expression for any variable name in iterable object if conditional expression]
Nëse elementi do të zgjidhet vetëm nga një shprehje e kushtëzuar, ai nuk përpunohet nga një shprehje, kështu që merr formën e mëposhtme
[variable name for variable name in original list if conditional expression]
Nëse shprehja me kusht nëse bëhet një shprehje nëse jo e kushtëzuar, ajo bëhet mohim dhe elementet që nuk e plotësojnë shprehjen e kushtëzuar mund të nxirren.
Përmban një varg specifik (përputhje e pjesshme) \ Nuk përmban:in
Në “string specifik në vargun origjinal”, kthen True nëse vargu origjinal përmban vargun specifik. Kjo është një shprehje e kushtëzuar.
Mohimi i in bëhet me jo in.
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222']
l_in = [s for s in l if 'XXX' in s]
print(l_in)
# ['oneXXXaaa', 'twoXXXbbb']
l_in_not = [s for s in l if 'XXX' not in s]
print(l_in_not)
# ['three999aaa', '000111222']
Zëvendësoni vargun specifik
Nëse dëshironi të zëvendësoni një varg elementesh të listës, përdorni metodën e vargut zëvendësoni() për çdo element në shënimin e kuptimit të listës.
Nëse nuk ka asnjë varg për t’u zëvendësuar, nuk ka nevojë të zgjidhni elementin në shprehjen e kushtëzuar if sepse ai nuk do të ndryshohet duke aplikuar zëvendësimin().
l_replace = [s.replace('XXX', 'ZZZ') for s in l]
print(l_replace)
# ['oneZZZaaa', 'twoZZZbbb', 'three999aaa', '000111222']
Nëse dëshironi të zëvendësoni një element të tërë që përmban një varg specifik, ekstraktoni atë me in dhe përpunoni me operatorin tresh. Operatori tresh shkruhet në formën e mëposhtme.True Value if Conditional Expression else False Value
Është në rregull nëse pjesa e shprehjes së shënimit të kuptimit të listës është një operator tresh.
l_replace_all = ['ZZZ' if 'XXX' in s else s for s in l]
print(l_replace_all)
# ['ZZZ', 'ZZZ', 'three999aaa', '000111222']
Më poshtë është një përmbledhje e rezultateve, e mbyllur në kllapa. Nëse nuk jeni mësuar të përdorni kllapa, mund të jetë më e lehtë për të kuptuar dhe shmangur gabimet. Gramatikisht nuk ka problem edhe po të shkruash kllapa.
[('ZZZ' if ('XXX' in s) else s) for s in l]
Përdorimi i in si kusht është konfuz me shënimin e kuptimit të listës në, por nuk është e vështirë nëse jeni në dijeni të formës sintaksore të shënimit të kuptimit të listës dhe operatorëve tresh.
Fillon me një varg specifik \ nuk fillon:startswith()
Metoda e vargut startswith() kthen true nëse vargu fillon me vargun e specifikuar në argument.
l_start = [s for s in l if s.startswith('t')]
print(l_start)
# ['twoXXXbbb', 'three999aaa']
l_start_not = [s for s in l if not s.startswith('t')]
print(l_start_not)
# ['oneXXXaaa', '000111222']
Përfundon me një varg karakteresh të veçantë \ jo fund:endswith()
Metoda e vargut endswith() kthen true nëse vargu përfundon me vargun e specifikuar në argument.
l_end = [s for s in l if s.endswith('aaa')]
print(l_end)
# ['oneXXXaaa', 'three999aaa']
l_end_not = [s for s in l if not s.endswith('aaa')]
print(l_end_not)
# ['twoXXXbbb', '000111222']
Gjykuar dhe nxjerrë sipas rastit
Metodat e vargut isupper(),islower() mund të përdoren për të përcaktuar nëse një varg është i gjithi me shkronja të mëdha apo të vogla.
l_lower = [s for s in l if s.islower()]
print(l_lower)
# ['three999aaa']
Konvertoni shkronjat e mëdha dhe të vogla
Nëse dëshironi të konvertoni të gjithë karakteret në shkronja të mëdha ose të vogla, përdorni metodat e vargut upper() dhe low(). Metoda të tjera përfshijnë kapitalize(), e cila shkruan vetëm shkronjën e parë, dhe swapcase(), e cila ndërron shkronjat e mëdha dhe të vogla.
Ashtu si në shembullin e zëvendësimit të mësipërm, përdorni operatorin tresh nëse dëshironi të përpunoni vetëm elementë që plotësojnë kushtin.
l_upper_all = [s.upper() for s in l]
print(l_upper_all)
# ['ONEXXXAAA', 'TWOXXXBBB', 'THREE999AAA', '000111222']
l_lower_to_upper = [s.upper() if s.islower() else s for s in l]
print(l_lower_to_upper)
# ['oneXXXaaa', 'twoXXXbbb', 'THREE999AAA', '000111222']
Përcakton nëse përdoren karaktere alfabetike apo numerike dhe i nxjerr ato
Metodat e vargut isalpha() dhe isnumeric() mund të përdoren për të përcaktuar nëse një varg është i gjithi alfabetik, numerik, etj.
l_isalpha = [s for s in l if s.isalpha()]
print(l_isalpha)
# ['oneXXXaaa', 'twoXXXbbb']
l_isnumeric = [s for s in l if s.isnumeric()]
print(l_isnumeric)
# ['000111222']
Kushtet e shumëfishta
Pjesa e shprehjes së kushtëzuar e të kuptuarit të listës mund të jetë kushte të shumëfishta. Mund të përdoren gjithashtu kushte negative “jo”.
Kur përdorni tre ose më shumë shprehje të kushtëzuara, është më e sigurt të mbyllni secilin grup në kllapa () sepse rezultati do të ndryshojë në varësi të renditjes.
l_multi = [s for s in l if s.isalpha() and not s.startswith('t')]
print(l_multi)
# ['oneXXXaaa']
l_multi_or = [s for s in l if (s.isalpha() and not s.startswith('t')) or ('bbb' in s)]
print(l_multi_or)
# ['oneXXXaaa', 'twoXXXbbb']
shprehje e rregullt (kompjuterike).
Shprehjet e rregullta lejojnë përpunim shumë fleksibël.
Objekti i përputhjes i kthyer nga re.match() kur përputhet përcaktohet gjithmonë si i vërtetë kur vlerësohet me një shprehje të kushtëzuar. Nëse nuk përputhet, kthen None, që është false në shprehjen e kushtëzuar. Pra, nëse doni të nxirrni vetëm elementët që përputhen me shprehjen e rregullt, thjesht aplikoni re.match() në pjesën e shprehjes së kushtëzuar të shprehjes së kuptimit të listës si më parë.
import re
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222']
l_re_match = [s for s in l if re.match('.*XXX.*', s)]
print(l_re_match)
# ['oneXXXaaa', 'twoXXXbbb']
Re.sub(), e cila zëvendëson pjesën e përputhur të një shprehjeje të rregullt, është gjithashtu e dobishme. Për të nxjerrë dhe zëvendësuar vetëm elementët e përputhur, thjesht shtoni “nëse shprehja e kushtëzuar”.
l_re_sub_all = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l]
print(l_re_sub_all)
# ['aaa---one', 'bbb---two', 'three999aaa', '000111222']
l_re_sub = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l if re.match('.*XXX.*', s)]
print(l_re_sub)
# ['aaa---one', 'bbb---two']