Extragerea, înlocuirea și transformarea unor elemente specifice din listele Python (array-uri)

Afaceri

Pentru a genera o nouă listă în Python prin extragerea sau ștergerea doar a acelor elemente dintr-o listă (matrice) existentă care îndeplinesc anumite condiții, sau prin efectuarea de înlocuiri sau conversii, utilizați înțelegerile de liste.

Următoarele aspecte sunt explicate aici, împreună cu un exemplu de cod.

  • Forma de bază a notației de înțelegere a listelor
  • Aplicați procesul la toate elementele din listă
  • Extragerea și ștergerea elementelor din listă care îndeplinesc criteriile.
  • Înlocuirea sau conversia elementelor care îndeplinesc condițiile din listă

Consultați următorul articol pentru exemple specifice de liste de șiruri de caractere.

De asemenea, este posibilă extragerea aleatorie a elementelor care nu îndeplinesc criteriile.

Rețineți că listele pot stoca diferite tipuri de date și sunt strict diferite de array-uri. Dacă doriți să manipulați array-uri în procese care necesită dimensiunea memoriei și adrese de memorie sau procesarea numerică a unor date mari, utilizați array (biblioteca standard) sau NumPy.

Următoarea listă este un exemplu

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

Forma de bază a notației de înțelegere a listelor

Atunci când se generează o nouă listă dintr-o listă, înțelegerile de liste sunt mai simplu de scris decât buclele for.

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

O expresie se aplică unui element care satisface expresia condițională a unui obiect iterabil (cum ar fi o listă sau un tupluplu) și devine un element al unei noi liste. Expresia „if conditional expression” poate fi omisă, caz în care expresia se aplică tuturor elementelor.

Consultați următorul articol pentru mai multe detalii, inclusiv notația de înțelegere a listelor imbricate.

Aplicați procesul la toate elementele din listă

De exemplu, dacă doriți să aplicați o anumită prelucrare la toate elementele unei liste, descrieți prelucrarea dorită în expresia de înțelegere a listei de mai sus.

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

Aceasta poate fi utilizată pentru a converti între liste de numere și liste de șiruri de caractere.

Extragerea și ștergerea elementelor din listă care îndeplinesc criteriile.

În cazul în care elementul trebuie să fie selectat doar printr-o expresie condițională, acesta nu este prelucrat printr-o expresie, deci are următoarea formă

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

Se generează o nouă listă din care se extrag numai elementele care îndeplinesc condiția (elementele pentru care expresia condițională este adevărată).

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]

Dacă „dacă expresia condițională if” este setată la „dacă nu este expresie condițională”, aceasta devine o negație și numai elementele care nu îndeplinesc condiția (elementele pentru care expresia condițională este falsă) pot fi selectate și extrase. Cu alte cuvinte, se generează o nouă listă din care sunt eliminate elementele care îndeplinesc condiția.

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]

Desigur, același rezultat se obține prin specificarea expresiei condiționale echivalente fără a utiliza not.

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]

Partea de expresie condițională poate fi constituită din mai multe condiții. De asemenea, se pot utiliza și nu-uri negative.

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]

Înlocuirea sau conversia elementelor care îndeplinesc condițiile din listă

În exemplul de extragere a elementelor de mai sus, au fost eliminate elementele care nu îndeplineau condițiile.

Dacă doriți să efectuați substituiri, conversii etc. numai asupra elementelor care îndeplinesc condițiile, aplicați operatorul ternar la partea de expresie a notației de înțelegere a listei.

În Python, operatorul ternar poate fi scris după cum urmează

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

Este un pic mai complicat, dar combinația dintre notația de înțelegere a listei și operatorii ternari este următoarea.

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

Partea închisă între paranteze este operatorul ternar (parantezele nu sunt necesare în codul propriu-zis).

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

În cazul în care un nume de variabilă este scris ca atare pentru valori adevărate sau false, valoarea elementului original este utilizată ca atare. În cazul în care se scrie o expresie, se aplică procesarea expresiei respective.

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