TI/Programowanie dla Fizyków Medycznych:Struktury danych:Krotki
Krotka to niemodyfikowalna sekwencja. Krotki są bardzo podobne do list, jednak krotki, które nie zawierają elementów modyfikowalnych mogą być kluczami w słownikach, co jest znaczącą zaletą.
Krotki można tworzyć wprost, przez podanie elementów oddzielonych przecinkami (nawiasy są opcjonalne):
>>> K = ('Ala', 5, [1, 7], (2, 'A'), {'a' : 'b', (1, 3) : 'c'}) #Ta krotka nie może być kluczem w słowniku bo zawiera struktury modyfikowalne : listę i słownik
>>> L = 'Ala', 5, [1, 7], (2, 'A'), {'a' : 'b', (1, 3) : 'c'}
>>> K == L
True
Pustą krotkę tworzy się następująco:
>>> K = ()
>>> K = tuple()
Za to krotkę jednoelementową tworzy się dość nieintuicyjnie - wymagany jest przecinek po elemencie aby odróżnić krotkę od onawiasowanej wartości:
>>> K = (5) #Teraz K jest liczbą 5, a nie jednoelementową krotką zawierającą liczbę 5
>>> K
5
>>> K= (5,) #Dopiero to jest jednoelementowa krotka
>>> K
(5,)
>>> K = 5,
>>> K
(5,)
Krotki można też tworzyć na bazie dowolnego obiektu po którym można się iterować przy pomocy funkcji wbudowanej tuple:
>>> K = tuple({'a' : 1, 'b' : 2}.iteritems())
>>> K
(('a', 1), ('b', 2))
Elementy krotki można przypisać na zmienne:
>>> K = (1, 2, 3)
>>> a, b, c = K
>>> a
1
>>> b
2
>>> c
3
Elementy krotek odczytujemy przy pomocy indeksów lub wycinków, dodawanie krotek tworzy nową krotkę będącą konkatenacją pierwotnych, a mnożenie prze liczbę tworzy krotkę będącą wielokrotną konkatenacją krotki bazowej. Podobnie jak w przypadku napisów i list krotki można przeglądać przy pomocy pętli for i posyłać do funkcji reduce, map i filter. Krotki udostępniają metody index i count działające analogicznie jak w przypadku list. W przypadku krotek możliwe są też porównania operatorami <=, <, >, >=, == i !=, a także testowanie czy element jest w krotce operatorem in i sprawdzanie długości funkcją len. Różnica występuje przy tworzeniu krotek składanych, analogiczna jak w przypadku list konstrukcja zwraca generator i aby uzyskać krotkę konieczne jest wywołanie tuple:
>>> K = (1, 2, 3)
>>> (x**2 for x in K)
<generator object <genexpr> at 0xb658f9dc>
>>> tuple((x**2 for x in K))
(1, 4, 9)