Tablice
Listy, krotki i słowniki – tablice w Python
Tablica to coś w rodzaju pudełka w którym jest x zmiennych. Python w odróżnieniu od omawianego c/c++ posiada aż trzy rodzaje, a dodatkowo jest na tyle elastyczny że zmienne mogą być różnego typu. Tablice pozwalają nam na sprawne zarządzanie wieloma jak nie tysięcoma zmiennymi posługując się indeksami (numerkami zmiennych), bardzo pomocne okażą się przy tym pętle. Pozwolą nam one na zapisywanie wartości jak i odczytywanie ale o tym za chwilę na przykładzie. Elementy w tablicy są numerowane od 0, dlaczego? To proste ponieważ jest 10 cyfr arabskich czyli od 0 do 9. Numerowanie od 1 byłoby marnotrawstwem. Warto o tym pamiętać aby uniknąć w przyszłości błędów.

Tworzenie tablic – list
Jak będę posługiwał się terminem tablica ponieważ jestem do niego przyzwyczajony, prawidłowa nazwa to lista. Lista jest zupełnie inną strukturą danych niż tablica jednak na potrzeby poniższych przykładów nie ma to większego znaczenia. A więc tablica składa się z 3 elementów. Pierwszym jest jej nazwa w tym przykładzie jest to tablica1, nawiasy kwadratowe, a trzecim elementem jest jej zawartość. W poniższym fragmencie kodu przedstawiam dwa sposoby tworzenia tablic.
tablica1 = [1,2,'a',3,4,"hej",5,6,"co","slychac"] #wartości tablicy uzupełniamy w kodzie print("Wyswietlamy piaty element tablicy1 ", tablica1[4]) #piąty element czyli 4 tablica2 = [] #tworzymy pustą tablice tablica2.append(input("Podajemy pierwszy element tablicy: ")) tablica2.append(input("Podajemy drugi element tablicy: ")) tablica2.append(input("Podajemy trzeci element tablicy: ")) print("Wyswietlamy pierwszy element tablicy2 ", tablica2[0]) # 1 element czyli zerowy print(tablica2) #wypisujemy całą tablice na raz
Na pierwszy rzut oka może wyglądać to przerażająco ale wcale tak nie jest. Zacznijmy od początku tablica1 ma 10 wartości a wszystkie zostały ustalone w kodzie. Spójrz że tworzenie tablic różni się od tworzenia zmiennych tylko tym że w nawiasach kwadratowych podaje się jej elementy. Następnie print wyświetla piąty element czyli 4 dlatego że tablice numerowane są od zera. Później tworzymy pustą tablice do której będziemy wczytywać elementy z klawiatury. Aby to zrobić w sprawny i szybki sposób korzystamy z metody append która dodaje element do naszej listy. Na końcu wyświetlamy pierwszy element naszej tablicy odwołując się do zerowego indexu.
Tworzenie tablic – krotek
Krotka to specyficzna tablica ponieważ w odróżnieniu od list nie można edytować jej zawartości. Kolejną różnicą jest to że podczas jej tworzenia wykorzystuje się nawiasy okrągłe. Krotki stosujemy jak pewnego rodzaju stałe ze względu na ich charakter, wartości w nie przechowywane są bezpieczne i można się do nich odwoływać. Poniżej przykład
krotka = ("bardzo", "wrazliwe", "zmienne", 100) print(krotka) print(krotka[2]) lista = [] lista.append(krotka[1]) lista.append("chlopaki") print(lista) if(krotka[3] == 100): lista[1] = "dziewczyny" print(lista)
Próba edytowania krotki zawsze zakończy się błędem, jednak nic nie stoi na przeszkodzie żeby jej wartości przypisać do listy lub porównać w instrukcji warunkowej.
Tworzenie tablic – słowników
Słownik to trzeci a zarazem ostatni rodzaj tablicy w Pythonie. Ta struktura znacząco się różni od list i krotek (struktury sekwencyjne) ponieważ zamiast indeksów posiada indywidualne klucze. Co za tym idzie nie przechowuje zmiennych lecz pary zmiennych. Najłatwiej będzie to objaśnić za pomocą przykładu
slownik = {"imie" : "Janek", "zawod" : "muzykant", "wiek" : 33} #pary klucz a następnie zmienna print(slownik["imie"]) slownik["imie"] = "Janko" #zmieniamy imie, oczywiście odwołujemy się do klucza slownik["kraj"] = "Polska" #dodajemy klucz i zmienną print(slownik)
Słowniki korzystają z nawiasów klamrowych a wewnątrz nich jest klucz oczywiście w cudzysłowiu następnie dwukropek i wartość przypisana do klucza. Odwołanie do wartości zawsze następuje po kluczu (zamiast indeksu jak to miało miejsce wcześniej) a jej dodanie przez stworzenie nowego klucza tak jak to ma miejsce w linijce 6 i nadaniu wartości.
Automatyczne uzupełnianie tablic
Zwróć uwagę na to że w poprzednim kodzie każdą wartość należało podawać lub wypisać własno ręcznie. Jest to naprawdę uciążliwe i zaśmieca kod źródłowy. Na szczęście z pomocą przychodzą pętle.
tablica = [] #tworzymy tablice ile = int(input("Ile elementow ma miec tablica: ")) print("Podawaj wartosci do tablicy") for i in range(0,ile): tablica.append(input()) print("Wypiszemy wszystkie elementy w odwrotnej kolejnosci") for i in range(ile,0,-1): print(tablica[i-1])
Dzięki pętlom cały proces przebiega automatycznie a o to przecież chodzi w informatyce. W tym przykładnie tablica nie ma określonego rozmiaru wszystko zależy od użytkownika. Następnie korzystając ze zmiennej ile wiemy ile razy ma się wykonać pętla tak aby uzupełnić całą tablice. Samo uzupełnianie odbywa się dzięki zmiennej i która w każdym obiegu pętli zmienia się o 1. W pierwszym obiegu i=0 czyli uzupełniamy pierwszy element tablicy, następnie i=1 uzupełniamy drugi element i tak dalej. Ważne jest to że i nigdy wychodzi poza zakres tablicy (czyli jej rozmiar). Spowodowałby to błąd a w następstwach wyłączenie programu, utratę danych i inne nie przewidziane skutki uboczne. Dlatego warto aby warunek kończący pętle był przemyślany i to uwzględniał. Niech ile=5 wówczas pętla wypisująca elementy od tyłu odwoła się do szóstego elementu tablicy a to spowoduje wyłączenie programu. Dlatego też w ostatniej linijce od i odejmujemy 1 tak aby wypisać tablica[4] czyli piąty element.
liczby = [] ile = 100 for i in range(0,ile): liczby.append(i+1) #uzupełnianie tablicy liczbami 1...100 while(True): #nigdy tego nie rób wybor = int(input("Wypisac 0 - parzyste 1 - nieparzyste ")) if(wybor!=1 and wybor!=0): continue #spójnik logiczny koniunkcji for i in range(0,ile): if(liczby[i]%2 == wybor): #wybór to reszta z dzielenia przez 2 print(liczby[i]) break #wyrwanie się z nieskończonej pętli
Ten przykład jest o tyle ciekawy że przy omawianiu pętli ostrzegałem aby tego nigdy nie robić. Zwróć uwagę że tutaj nieskończona pętla jest pewnym zabezpieczeniem a to dlatego że jest tutaj continue i break. Ciekawić może też słowo kluczowe and oznacza ono koniunkcje, oczywiście jest również alternatywa (czyli lub) zapisywane słowem or. Tego fragmentu kodu nie będę szczegółowo omawiał ponieważ nie ma tutaj niczego nowego apropo tablic. Jest tutaj fajnie wykorzystana instrukcja warunkowa, reszta z dzielenia (modulo) i pętla for dlatego zachęcam Cię do samodzielnej analizy tego kodu.
Ciekawostki
Zmienna która jest słowem również jest tablicą i można odwoływać się do dowolnego elementu (litery). Poniżej przykład
slowo = "honoru" print(slowo) print(slowo[0:3]) print(slowo[3]) print(slowo[4:6])
Zapis slowo[0:3) oznacza że mają być wypisane wszystkie znaki od indeksu 0 do indeksu 2. Warto omówić również pewne metody które bardzo często są stosowane przy tablicach, jedną z nich już widziałeś, mianowicie append ale to nie koniec. Jest również
- del tablica[0] – kasuje pierwszy element tablicy
- len(tablica) – podaje długość tablicy
- cmp(zmianna1, zmienna2) – porównuje dwa elementy tablicy
- tablica.count(wartosc) – sprawdza ile razy wystąpiło powtórzenie danej wartości w tablicy
- tablica.insert(indeks, wartosc) – wstawia pod podanym indeksem podaną wartość
- tablica.remowe(element) – równoważne z del
Podsumowanie
Domyślam się że masz niemały mętlik w głowie po przerobieniu tego tematu. Odpocznij i na spokojnie pomyśl o tym wszystkim jeszcze raz. Tablice w Pythonie nie są niczym trudnym a na pewno warto je znać. Myślę że jak się z nimi oswoisz to nie będziesz mógł wyobrazić sobie pracy bez nich. Pamiętaj o tym że są one numerowane od 0. Mając to na uwadze unikniesz wielu problemów podczas programowania. Powodzenia!