Upang makabuo ng bagong listahan sa Python sa pamamagitan ng pag-extract o pagtanggal lamang ng mga elemento ng isang umiiral na listahan (array) na nakakatugon sa ilang partikular na kundisyon, o sa pamamagitan ng pagsasagawa ng mga pagpapalit o conversion, gumamit ng mga pag-unawa sa listahan.
Ang mga sumusunod ay ipinaliwanag dito, kasama ang sample code.
- Pangunahing anyo ng notasyon sa pag-unawa sa listahan
- Ilapat ang proseso sa lahat ng elemento ng listahan
- I-extract at tanggalin ang mga elemento mula sa listahan na nakakatugon sa pamantayan
- Palitan o i-convert ang mga elemento na nakakatugon sa mga kundisyon ng listahan
Tingnan ang sumusunod na artikulo para sa mga partikular na halimbawa ng mga listahan ng mga string.
Posible rin na random na kunin ang mga elemento na hindi nakakatugon sa pamantayan.
- KAUGNAY:Random na pagpili ng mga elemento mula sa isang listahan sa Python:
choice()
,sample()
,choices()
Tandaan na ang mga listahan ay maaaring mag-imbak ng iba’t ibang uri ng data at mahigpit na naiiba sa mga array. Kung gusto mong pangasiwaan ang mga array sa mga prosesong nangangailangan ng laki ng memory at mga address ng memory o numerical processing ng malaking data, gumamit ng array (standard library) o NumPy.
Ang sumusunod na listahan ay isang halimbawa
l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
Pangunahing anyo ng notasyon sa pag-unawa sa listahan
Kapag bumubuo ng isang bagong listahan mula sa isang listahan, ang mga pag-unawa sa listahan ay mas madaling isulat kaysa para sa mga loop.
[expression for any variable name in iterable object if conditional expression]
Ang isang expression ay inilapat sa isang elemento na nakakatugon sa conditional expression ng isang iterable object (tulad ng isang listahan o tuple) at nagiging isang elemento ng isang bagong listahan. Maaaring tanggalin ang “kung conditional expression”, kung saan ang expression ay inilapat sa lahat ng elemento.
Tingnan ang sumusunod na artikulo para sa higit pang mga detalye, kabilang ang nested list comprehension notation.
Ilapat ang proseso sa lahat ng elemento ng listahan
Halimbawa, kung gusto mong maglapat ng ilang pagproseso sa lahat ng elemento ng isang listahan, ilarawan ang gustong pagpoproseso sa expression ng pag-unawa sa listahan sa itaas.
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']
Magagamit ito upang mag-convert sa pagitan ng mga listahan ng mga numero at mga listahan ng mga string.
I-extract at tanggalin ang mga elemento mula sa listahan na nakakatugon sa pamantayan
Kung ang elemento ay pipiliin lamang ng isang conditional expression, hindi ito pinoproseso ng isang expression, kaya ito ay tumatagal ng sumusunod na anyo
[variable name for variable name in original list if conditional expression]
Ang isang bagong listahan ay nabuo mula sa kung saan ang mga elemento lamang na nakakatugon sa kundisyon (mga elemento kung saan totoo ang conditional expression) ang kinukuha.
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]
Kung ang “kung conditional expression” ay nakatakda sa “kung hindi conditional expression,” ito ay magiging isang negation, at ang mga elemento lamang na hindi nakakatugon sa kundisyon (mga elemento kung saan ang conditional expression ay false) ang maaaring piliin at i-extract. Sa madaling salita, ang isang bagong listahan ay nabuo mula sa kung saan ang mga elemento na nakakatugon sa kundisyon ay aalisin.
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]
Siyempre, ang parehong resulta ay nakuha sa pamamagitan ng pagtukoy ng katumbas na conditional expression nang hindi gumagamit ng hindi.
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]
Ang bahagi ng conditional expression ay maaaring maraming kundisyon. Maaari ding gumamit ng mga negatibong hindi.
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]
Palitan o i-convert ang mga elemento na nakakatugon sa mga kundisyon ng listahan
Sa halimbawa ng pagkuha ng elemento sa itaas, inalis ang mga elementong hindi nakakatugon sa mga kundisyon.
Kung gusto mong magsagawa ng mga pagpapalit, conversion, atbp. lamang sa mga elementong nakakatugon sa mga kundisyon, ilapat ang ternary operator sa bahagi ng expression ng notasyon sa pag-unawa sa listahan.
Sa Python, ang ternary operator ay maaaring isulat bilang mga sumusunod
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
Ito ay medyo kumplikado, ngunit ang kumbinasyon ng notasyon ng pag-unawa sa listahan at mga operator ng ternary ay ang mga sumusunod.
[True Value if Conditional Expression else False Value for any variable name in original list]
Ang bahaging nakapaloob sa panaklong ay ang ternary operator (hindi kailangan ang mga panaklong sa aktwal na code).
[(True Value if Conditional Expression else False Value) for any variable name in original list]
Kung ang anumang variable na pangalan ay nakasulat bilang ay para sa totoo o maling mga halaga, ang halaga ng orihinal na elemento ay ginagamit bilang ay. Kung nakasulat ang isang expression, inilalapat ang pagproseso ng expression na iyon.
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]