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
- Wstęp do kursu
- Moduły i pakiety
- Programowanie obiektowe – wstęp
- Programowanie obiektowe – dziedziczenie
- Programowanie obiektowe – hermetyzacja
- Mini projekt – Organizer
- Funkcje rekurencyjne w Python
- Pisanie skryptów w Python
- Mini projekt – tajny agent, generator haseł
- *args oraz **kwargs
- Dekoratory w Python
- Mini projekt – tajny agent – kontakty
- Odwzorowanie list <– bieżąca lekcja
- Podsumowanie oraz dalsze kroki