Toa, badilisha, na ubadilishe vitu maalum vya orodha za Python (safu)

Biashara

Ili kutoa orodha mpya katika Python kwa kutoa au kufuta tu vipengele vya orodha iliyopo (safu) ambayo inakidhi hali fulani, au kwa kubadilisha au kubadilisha, tumia ufahamu wa orodha.

Ifuatayo imeelezewa hapa, pamoja na nambari ya mfano.

  • Aina ya msingi ya nukuu ya ufahamu wa orodha
  • Tumia mchakato kwa vipengele vyote vya orodha
  • Toa na ufute vipengee kutoka kwenye orodha ambavyo vinakidhi vigezo
  • Badilisha au ubadilishe vipengele vinavyokidhi masharti ya orodha

Tazama nakala ifuatayo kwa mifano maalum ya orodha za mifuatano.

Inawezekana pia kutoa vitu kwa nasibu ambavyo havikidhi vigezo.

Kumbuka kuwa orodha zinaweza kuhifadhi aina tofauti za data na ni tofauti kabisa na safu. Ikiwa ungependa kushughulikia safu katika michakato inayohitaji ukubwa wa kumbukumbu na anwani za kumbukumbu au usindikaji wa nambari za data kubwa, tumia safu (maktaba ya kawaida) au NumPy.

Orodha ifuatayo ni mfano

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

Aina ya msingi ya nukuu ya ufahamu wa orodha

Wakati wa kuunda orodha mpya kutoka kwa orodha, ufahamu wa orodha ni rahisi kuandika kuliko kwa vitanzi.

[expression for any variable name in iterable object if conditional expression]

Usemi hutumika kwa kipengele ambacho kinakidhi usemi wa masharti wa kitu kinachoweza kutekelezeka (kama vile orodha au nakala) na kuwa kipengele cha orodha mpya. “Ikiwa usemi wa masharti” unaweza kuachwa, ambapo usemi huo unatumika kwa vipengele vyote.

Tazama makala ifuatayo kwa maelezo zaidi, ikijumuisha nukuu ya ufahamu wa orodha iliyoorodheshwa.

Tumia mchakato kwa vipengele vyote vya orodha

Kwa mfano, ikiwa ungependa kutumia uchakataji fulani kwa vipengele vyote vya orodha, eleza uchakataji unaotaka katika usemi wa ufahamu wa orodha hapo juu.

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']

Hii inaweza kutumika kubadilisha kati ya orodha ya nambari na orodha ya mifuatano.

Toa na ufute vipengee kutoka kwenye orodha ambavyo vinakidhi vigezo

Ikiwa kipengee kitachaguliwa tu na usemi wa masharti, hauchakatwa na usemi, kwa hivyo inachukua fomu ifuatayo.

[variable name for variable name in original list if conditional expression]

Orodha mpya inatolewa ambayo vipengele vinavyokidhi hali pekee (vipengele ambavyo usemi wa masharti ni kweli) hutolewa.

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]

Iwapo “ikiwa usemi wa masharti” umewekwa kuwa “ikiwa si usemi wa masharti,” inakuwa kanusho, na vipengele ambavyo havikidhi masharti (vipengele ambavyo usemi wa masharti ni uongo) vinaweza kuchaguliwa na kutolewa. Kwa maneno mengine, orodha mpya inatolewa ambayo vipengele vinavyokidhi hali huondolewa.

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]

Kwa kweli, matokeo sawa yanapatikana kwa kutaja usemi sawa wa masharti bila kutumia la.

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]

Sehemu ya usemi wa masharti inaweza kuwa hali nyingi. Si hasi pia inaweza kutumika.

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]

Badilisha au ubadilishe vipengele vinavyokidhi masharti ya orodha

Katika mfano wa uchimbaji wa kipengele hapo juu, vipengele ambavyo havikukidhi masharti viliondolewa.

Ikiwa ungependa kubadilisha, ubadilishaji, n.k. kwa vipengele vinavyokidhi masharti pekee, tumia opereta wa tatu kwenye sehemu ya usemi ya nukuu ya ufahamu wa orodha.

Katika Python, operator ternary inaweza kuandikwa kama ifuatavyo

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

Ni ngumu kidogo, lakini mchanganyiko wa nukuu za ufahamu wa orodha na waendeshaji wa tatu ni kama ifuatavyo.

[True Value if Conditional Expression else False Value for any variable name in original list]

Sehemu iliyofungwa kwenye mabano ni operator wa ternary (mabano sio lazima katika msimbo halisi).

[(True Value if Conditional Expression else False Value) for any variable name in original list]

Ikiwa jina lolote la kutofautisha limeandikwa kama lilivyo kwa maadili ya kweli au ya uwongo, thamani ya kipengele asili inatumika kama ilivyo. Ikiwa usemi umeandikwa, usindikaji wa usemi huo unatumika.

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]
Copied title and URL