Odwzorowanie listy, czy też, list comprehnsions, to możliwość utworzenia nowej listy w oparciu, o listę już istniejąca, w zwięzły i prosty sposób. W wielu przypadkach, jest to eleganckie zastępstwo do pętli for. Poniżej przyjrzymy się jak je wykorzystywać w praktyce. Zaczynajmy!

Powiedzmy, że mamy do rozwiązania prosty problem, polegający na zwiększeniu wartości w liście liczb, o 1.

Czyli:

lista = [1,3,5,7]

a potrzebujemy

lista = [2,4,6,8]

Możemy to rozwiązać za pomocą pętli for:

lista = [1,3,5,7]

count = 0
for i in lista:
    lista[count]+=1
    count+=1
    
lista

lub za pomocą odwzorowania:

lista = [1,3,5,7]

lista = [i+1 for i in lista]

lista

Efekt jest ten sam, jednak zapis bardziej zwięzły.

W skórcie, forma naszego zapsu, jest następująca:

<nowa lista> = [<operacja><pętla><warunek>]

Nowa lista – nowo uwtorzona lista

Operacja – może to być sama wartość, lub też jej transformacja

Pętla – iteracja po starej liście

Warunek – dla których elementów, ze starej listy, należy dokonać operacji.

Spójrzmy na kilka przykładów:

Przykład 1:

Nowa lista, powinna zawierać tylko wartości parzyste:

lista = [1,3,4,5,7,8]

lista = [i for i in lista if i % 2 == 0 ]

Wykorzystaliśmy możliwość umieszczenia warunku na końcu, i w rezultacie otrzymamy listę = [4,8]

Przykład 2:

Zamienić liczby w liście na napis ‚parzyste’, dla liczb parzystych, i ‚nieparzyste’, dla liczb nieparzystych

lista = [1,3,4,5,7,8]

lista = ['Parzysta' if i%2 == 0 else 'Nieparzysta' for i in lista]

W rezultacie otrzymamy –

['Nieparzyste',  'Nieparzyste',  'Parzyste',  'Nieparzyste',  'Nieparzyste',  'Parzyste']

Wykorzystaliśmy, możliwość wykonania operacji, w której również znajduje się warunek. Możemy tam, również, umieścić dowolną funkcję. Spójrzmy:

lista = [1,3,4,5,7,8]

def funk (i):
    if i % 2 == 0: return 'Parzyste'
    else: return 'Nieparzyste'
    
lista = [funk(i) for i in lista]

Przykład 3:

Wygenerujmy listę z liczbami od 0 do 1000.

lista = [i for i in range(1000)]
lista

Przykład 4.

Zsumujmy liczby od 0 do 9

sum([i for i in range(10)])

Możemy obejść się bez nawiasów []

sum(i for i in range(10))

i na przykład, zsumować liczby tylko parzyste

sum(i for i in range(10) if i %2 == 0)

Przykład 5.

Zamienić ciąg znaków na listę, w której, każdy element jest poszczególną literą:

tekst = "Przykładowy tekst 234"
lista = [i for i in tekst]
lista

Podsumowując. Głównym zadaniem odwzorowania list, jest sprawienie aby nasz kod był bardziej przejrzysty, i z takim zamysłem powinno się je stosować. Jest to czytelniejsze niż pętle for, natomiast w przypadku iteracji po listach czy łańcuchu znaków, będziemy mogli użyć, tego mechanizmu, dość często.

Pyton, NIE tylko dla początkujących

  1. Wstęp do kursu
  2. Moduły i pakiety
  3. Programowanie obiektowe – wstęp
  4. Programowanie obiektowe – dziedziczenie
  5. Programowanie obiektowe – hermetyzacja
  6. Mini projekt – Organizer
  7. Funkcje rekurencyjne w Python
  8. Pisanie skryptów w Python
  9. Mini projekt – tajny agent, generator haseł
  10. *args oraz **kwargs
  11. Dekoratory w Python
  12. Mini projekt – tajny agent – kontakty
  13. Odwzorowanie list <– bieżąca lekcja
  14. Podsumowanie oraz dalsze kroki