W poprzednim odcinku zaczęliśmy sobie mówić o tuplach w Pythonie. Dziś zatem pociągniemy sobie ten temat dalej. Co wiemy o takiej konstrukcji jak tupla, w języku Python? Ano wiemy, że jest to kolekcja, która jest niemutowalna, dostęp do niej jest szybszy i ogólnie jest ciekawym tworem.
Przypomnijmy sobie zatem jak możemy sobie stworzyć taką prostą tuple, a przy okazji przypomnijmy sobie jak sprawdzić czy w ogóle stworzyliśmy tuplę. Czy przypadkiem nie wyszło nam coś innego, bo i tak może się tutaj zdarzyć.

Jak możemy się spodziewać powyższy kod, w sposób nie do końca oczywisty, stworzy Nam prostą Tuple w Pythonie i sprawdzi jej typ. I gdy uruchomimy taki kod, możemy zobaczyć, że rzeczywiście stworzyliśmy tuple. Możemy teraz coś do niej dodać...

...a nie, czekajcie. W konsoli nam powiedzą, że jednak nie możemy. No właśnie, to przecież tupla, nie dodamy niczego. No to stwórzmy ją jeszcze raz.
Operacje na tuplach
Jeśli Naszą tuplę stworzymy od podstaw znowu, bo nie możemy jej zmodyfikować, i zrobimy ja trochę większą. Powiedzmy, że damy sobie w niej 8 kolejnych cyfr (z lenistwa). To będziemy mogli się pobawić, bo mimo tego, że nie możemy tupli zmieniać, to jednak jakieś operacje możemy wykonywać na niej.

Możemy oczywiście tuplę wyświetlić, ale to już było, przejdźmy do slicingu. Możemy bowiem na tupli zastosować slicing, o którym niedawno się uczyliśmy w odniesieniu do list. Zróbmy zatem nową tuplę poprzez zastosowanie składnie wycinania na starej.

Stworzyliśmy nową tuplę o nazwie moja_nowa_tupla i dodaliśmy do niej trzy wartości. Zrobiliśmy to poprzez wycięcie trzech pierwszych wartości starej tupli, zastosowując na niej składnię slicingu. Nie podaliśmy pierwszej wartości bo i wycinamy od początku kolekcji, a tak to mniej pisania. Natomiast podaliśmy pozycję elementu , do którego wycinamy (ale bez niego), czyli pozycje numer 3. Finalnie skończyło się na tym, że wycięliśmy trzy pierwsze elementy poprzedniej tupli, by zrobić z nich nową.
Widzimy zatem, że Nasze stare sztuczki działają na nowopoznanych kolekcjach, więc są dość uniwersalne i nie musimy się uczyć czegoś nowego, w tym zakresie. No i bardzo dobrze, bowiem taka cecha jest dość wygodna i pożądana. Robisz prawo jazdy i możesz jeździć samochodem obojętnie jakiej marki.
Operatory in i not in na tuplach
Na tuplach w Pythonie jako kolekcji możemy też używać standardowych operatorów, jakich często używamy przy kolekcjach, czyli takich jak in czy not in. Moglibyśmy przykładowo sprawdzić czy cyfra dwa istnieje w nowej tupli.

Oczywiście użycie operatora dzięki, któremu sprawdzimy prawdziwość faktu obecności dwójeczki w Naszej tupli jest bajeszcznie prosta. Jest ona obecna. Analogicznie działa operator not in, którego sprawdzić działanie możesz sam/a w domu. Tak, róbcie to w domu!
Arytmetyka tupli
Możemy dodawać liczby, co każdy (mam nadzieję) wie z matematyki. Możemy dodawać do siebie także tablice, a z tego miejsca droga prosta do wniosku, że tuple też, bo skoro tablice są kolekcjami i się dodają, to czemuby nie dodać tupli? Sprawdźmy to.

Jak widzimy, Nasze wnioski są trafne. Na pytanie czy tuple w Pythonie można dodawać odpowiedzieć od teraz możemy twierdząco. Nie samym dodawaniem jednak żyje człowiek, na tuple można rzucić też inne z podstawowych zaklęć arytmetyki.

Jak więc można zobaczyć tuple można mnożyć czy dodawać, oczywiście można też dodać taką tuple, której jeszcze nie ma, przy okazji ją tworząc. Może te i inne zaklęcia przetestujesz w domu 😉
Inne przydatne operacje na tuplach
Skoro jest sobie taka tupla, a taka tupla jest kolekcją, to możemy także sprawdzić w łatwy sposób jej długość/ wielkość. Pamięta ktoś jak to się robi? Ano jest taka jedna funkcyjka, która może nam pomóc to zrobić - a właściwie zrobić to za nas. Jeśli użyjemy bowiem funkcji len() na takiej tupli, to otrzymamy ilość jej elementów, co w sumie jest tym o co nam chodzi.

Jak widzimy, takie sobie kodzik używający na tupli funkcji wspomnianej, wyświetla nam cyfrę osiem, co by się zgadzało nawet z ilością Naszych elementów, bowiem jest ich właśnie tyle.
Możemy też wziąć sobie jakąś listę i użyć na niej takiej funkcji jak tuple(), tak jest w Pythonie taka funkcja. No i co mogłaby robić taka funkcja? Oczywiście zamieniać to co jej podamy w tuple. Zatem moglibyśmy sobie wziąć tą Naszą listę i w prosty sposób ją "przetuplić".

I tak oto, w bajeczne prosty sposób (bo rzeczy dzieją się prawie same) zamieniamy/ konwertujemy sobie listę w tuplę. Sprwdź czy można też na odwrót. Jeśli mamy sobie taką funkcję tuple i nie podamy jej żadnego argumentu to powstanie nowa, pusta tupla.
Na tuple, jak i na listay (znowu uniwersalność) można rzucać też inne przydatne zaklęcia. Oprócz zaklęcia len, będziemy mieli też max() czy min(), które pozwolą Nam na poznanie najmniejszej i największej wartości w kolekcji.

Po dowiedzeniu się, że jeden jest najmniejsze w Naszej tupli, a największe 99, może nam przyjść ochota. Ochota na coś innego, a mianowicie redukcję. Możemy zredukować przykładowo zestaw Naszych wartości do jednej wartości - sumy wszystkich wartości. Zgadnijcie, do tego też mamy gotową, łatwą w użyciu funkcje o nazwie sum.

Otrzymujemy tylko jeden element, jedną wartość, która jest właśnie sumą Naszej całej tupli, możesz sprawdzić czy się zgadza.
Inne sztuczki
Ciekawą sztuczką może być też coś takiego, że każdą wartość tupli będzie reprezentowała inna zmienna. Oczywiście nie będziemy tutaj ręcznie przypisywać każdej kolejnej zmiennej, kolejnego elementu z tupli. Na osiągnięcie takiego efektu, jednym ze sposobów jest wykorzystanie czegoś, co można nazwać "wieloprzypisaniem". Jest to po prostu przypisanie wartości do kilku zmiennych w jednej linii. Możemy to osiągnąć wymieniając kolejne zmienne po przecinku.

Jak możemy zauważyć każda kolejna zmienna wymieniona po przecinku otrzymała wartość każdego kolejnego elementu tupli. Jest to ciekawa sztuczka i nieraz się przydaje. Przy okazji możemy też zobaczyć, że print nie przyjmuje tylko jednego argumentu.
Możemy też niejako "oszukać system" bowiem możemy umieścić w tupli tablicę, która jest mutowalna. W takim wypadku niemutowalna tupla, będzie miała w sobie mutowalną tablicę, takiego trochę konia trojańskiego, bo "pokona" on niemutowalnośc tej tupli.

I tutaj Nasza tupla zyska supermoce, bowiem nie możemy jej zmienić, ani dodać do niej wartości, ale możemy takie operacje robić z tablicą będącą w środku tupli.

Jak więc możemy zobaczyć da się obejść system i zrobić niejako mutowalną tuplę, ale należy tak naprawdę wrzucić do niej tablicę i to ją zmieniać. Mamy wtedy możliwość zmian, dodawania czy usuwania. Jest to nienajlepszy pomysł, bowiem tuple do tego nie służą, ale się da 😉
Metody tupli
Na koniec możemy pokazać sobie dwie przydatne metody. Mówię tutaj o metodzie count, która pomoże Nam policzyć wystąpienia podanego jej jako argument elementu. Oraz metodzie index, która pomoże Nam znaleźć index konkretnego elementu, zobaczmy jak to działa.

Możemy się przekonać, że w całej tupli moja_tupla są dwie sztuki cyfry dwa. Z kolei pierwsze wystąpienie wspomnianej cyfry jest na indeksie o numerze jeden. List nie umieszczamy w tupli. Też dlatego, że taka metoda count nie umie "wejść w listę" i zliczyć też tej dwójki ze środka listy.
Jak widzimy w Pythonie jest dużo uniwersalnych funkcji i operacji, które możemy stosować na kolekcjach. Jest to bardzo przydatna i wygodna rzecz, bowiem "poznajemy raz, możemy stosować w wielu sytuacjach". Na razie to tyle na temat tupli w Pythonie, ale nie zapominajmy o nich!

[…] będziemy kontynuować Naszą przygodę. Ostatnim razem poznaliśmy tuples, dziś natomisto poznamy czym są dictonaries w Pythonie. Są to tzw. słowniki, potocznie zwane […]