Uue loendi genereerimiseks Pythonis, eemaldades või kustutades olemasolevast loendist (massiivist) ainult need elemendid, mis vastavad teatud tingimustele, või teostades asendusi või teisendusi, kasutage loendikäsitlusi.
Siin selgitatakse järgmist koos näidiskoodiga.
- Loetelu mõistmise põhiline märkimisviis
- Rakenda protsessi kõigile nimekirja elementidele
- Kriteeriumidele vastavate elementide väljavõtmine ja kustutamine loetelust
- Asendada või teisendada elemendid, mis vastavad loendi tingimustele.
Konkreetseid näiteid stringide loetelude kohta leiate järgmisest artiklist.
- RELATED:Stringide loendi (massiivi) tingimustele vastavate elementide väljavõtmine ja asendamine Pythonis
Samuti on võimalik juhuslikult eraldada elemente, mis ei vasta kriteeriumidele.
Pange tähele, et loendid võivad salvestada eri tüüpi andmeid ja erinevad rangelt massiividest. Kui soovite käsitleda massiive protsessides, mis nõuavad mälu suurust ja mäluaadressi või suurte andmete numbrilist töötlemist, kasutage array (standardraamatukogu) või NumPy.
Alljärgnev loetelu on näide
l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
Loetelu mõistmise põhiline märkimisviis
Kui loendist genereeritakse uus loend, on loendikäsitlusi lihtsam kirjutada kui for-silmuseid.
[expression for any variable name in iterable object if conditional expression]
Väljendit rakendatakse elemendile, mis vastab iteratiivse objekti (näiteks loendi või tupli) tingimusavaldusele, ja sellest saab uue loendi element. “if tingimusavalduse” võib ära jätta, sellisel juhul rakendatakse väljendit kõigile elementidele.
Lisateavet vt järgmisest artiklist, sealhulgas nested list comprehension notation.
Rakenda protsessi kõigile nimekirja elementidele
Näiteks kui soovite rakendada mõnda töötlemist kõikidele loendi elementidele, kirjeldage soovitud töötlemist ülaltoodud loendi mõistmise väljendis.
l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]
l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']
Seda saab kasutada numbrite loetelude ja stringide loetelude vaheliseks teisendamiseks.
Kriteeriumidele vastavate elementide väljavõtmine ja kustutamine loetelust
Kui elementi soovitakse valida ainult tingimusliku väljendi abil, siis seda ei töödelda väljendi abil, nii et see võtab järgmise kuju
[variable name for variable name in original list if conditional expression]
Luuakse uus nimekiri, millest eraldatakse ainult need elemendid, mis vastavad tingimusele (elemendid, mille puhul tingimusavaldis on tõene).
l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]
l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]
Kui “if tingimusavalduse” väärtuseks on “if not tingimusavalduse”, muutub see eituseks ja ainult need elemendid, mis ei vasta tingimusele (elemendid, mille puhul tingimusavalduse väärtus on vale), saab valida ja välja võtta. Teisisõnu luuakse uus nimekiri, millest eemaldatakse elemendid, mis vastavad tingimusele.
l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]
l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]
Loomulikult saab sama tulemuse, kui määrata samaväärne tingimusavaldis ilma not'i kasutamata.
l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]
l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]
Tingimusavalduse osa võib olla mitu tingimust. Kasutada võib ka negatiivseid not'e.
l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]
l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]
Asendada või teisendada elemendid, mis vastavad loendi tingimustele.
Ülaltoodud elemendi väljavõtte näites eemaldati elemendid, mis ei vastanud tingimustele.
Kui soovite teha asendusi, teisendusi jne ainult tingimustele vastavatele elementidele, rakendage ternaaroperaatorit loendi mõistmise notatsiooni väljendiosale.
Pythonis saab ternaarse operaatori kirjutada järgmiselt
True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100
b = 30
y = 100 if b > 50 else 0
print(y)
# 0
See on veidi keeruline, kuid loetelu mõistmise notatsiooni ja kolmikoperaatorite kombinatsioon on järgmine.
[True Value if Conditional Expression else False Value for any variable name in original list]
Sulgudes olev osa on ternaarne operaator (sulgudes ei ole tegelikus koodis vaja).
[(True Value if Conditional Expression else False Value) for any variable name in original list]
Kui mis tahes muutuja nimi on kirjutatud tõese või vale väärtuse puhul, kasutatakse algse elemendi väärtust sellisena, nagu see on. Kui kirjutatakse väljendus, rakendatakse selle väljendi töötlemist.
l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]
l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]
l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]
l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]