Hoe lang leven dieren? Deze knappe infografiek (PDF1) van Alan Bernau Jr. toont de levensduur van knaagdieren over mensen tot haaien, en laat zien hoe de levensduur van dieren varieert van een paar jaar tot 500 jaar en meer. Kijk maar eens hoe het met jouw levensduur gesteld is tussen deze lijst van 50 dieren!
De eigenschappen van enkele dingen worden beschreven in een tekstbestand. Elke regel van het bestand beschrijft één ding aan de hand van twee of meer informatievelden die van elkaar gescheiden worden door komma's. Het eerste veld bevat de unieke naam van het ding. In de naam zelf komen er nooit komma's voor. De overige velden bevatten telkens een numerieke waarde (geheel getal) voor een bepaalde eigenschap van het ding. Het aantal velden kan verschillen van bestand tot bestand, maar binnen één bestand bestaan alle regels uit evenveel velden. De velden met de numerieke waarden worden van links naar rechts genummerd vanaf nul.
Dit bestand bevat bijvoorbeeld numerieke waarden voor vier eigenschappen van enkele dieren (data.txt2):
GIANT BARREL SPONGE,2300,17,16,2 COW,20,3,9,2 DOG,13,3,20,4 LOBSTER,50,7,10,1 GEODUCK,140,7,15,7 CHICKEN,10,7,22,-1 GREATER FLAMINGO,60,15,20,4 KOI,50,3,19,7 CHEETAH,10,7,15,2 ALDABRA GIANT TORTOISE,255,20,21,-4
Daarin heeft bijvoorbeeld het dier met de naam KOI waarde 50 in veld 0 (de levensduur van het dier), waarde 3 in veld 1 (het aantal letters in de naam van het dier), waarde 19 in veld 2 (het aantal letters in de binomiale naam van het dier: Cyprinus rubrofuscus) en waarde 7 in veld 3. Gevraagd wordt:
Schrijf een functie lees_eigenschappen waaraan de locatie (str) van een tekstbestand met de eigenschappen van enkele dingen moet doorgegeven worden. De functie moet een dictionary (dict) teruggeven die elke naam (str) uit het bestand afbeeldt op een tuple met de numerieke waarden (int) voor de eigenschappen van het ding.
Schrijf een functie waarden waaraan twee argumenten moeten doorgegeven worden: i) een reeks (list of tuple) met $$m$$ namen (str) $$t_1, t_2, \ldots, t_m$$ en ii) de locatie (str) van een tekstbestand met de eigenschappen van enkele dingen. De functie heeft ook nog een derde optionele parameter veld waaraan een getal $$n \in \mathbb{N}$$ (int; standaardwaarde: 0) kan doorgegeven worden. De functie moet een nieuwe lijst (list) met $$m$$ numerieke waarden $$w_1^n, w_2^n, \ldots, w_m^n$$ teruggeven, waarbij $$w_i^n$$ (int) de numerieke waarde uit veld $$n$$ is van het ding met naam $$t_i$$ ($$i = 1, 2, \ldots, m$$). We zeggen dat $$w_i^n$$ de waarde in veld $$n$$ is van het ding $$t_i$$.
Schrijf een functie rangschik waaraan twee argumenten moeten doorgegeven worden: i) een lijst (list) met namen (str) en ii) de locatie (str) van een tekstbestand met de eigenschappen van enkele dingen. De functie heeft ook nog een derde optionele parameter veld waaraan een getal $$n \in \mathbb{N}$$ (int; standaardwaarde: 0) kan doorgegeven worden. De functie heeft ook nog een vierde optionele parameter dalend waaraan een Booleaanse waarde (bool; standaardwaarde: False) kan doorgegeven worden. De functie moet de dingen (namen) in de gegeven lijst in stijgende (dalend=False) of in dalende (dalend=True) volgorde rangschikken volgens hun waarde in veld $$n$$. Dingen met dezelfde waarde in veld $$n$$ moeten in alfabetische (dalend=False) of in omgekeerd alfabetische (dalend=True) volgorde van hun naam gerangschikt worden.
Schrijf een functie gerangschikt met dezelfde verplichte en optionele parameters als functie rangschik, behalve dat aan de eerste parameter een collectie (list, tuple of set) met namen mag doorgegeven worden. De functie moet een nieuwe lijst (list) teruggeven, waarin de namen in dezelfde volgorde opgelijst worden als bij de functie rangschik.
Zowel de methode sort3 als de ingebouwde functie sorted4 hebben een parameter key waaraan een functie kan doorgegeven worden. Deze functie wordt op elk element aangeroepen voordat de elementen met elkaar te vergeleken worden. Aan de functie wordt één argument doorgegeven en de waarde die de functie teruggeeft wordt gebruikt bij het sorteren. Meer info5.
De laatste drie functies mogen ervan uitgaan dat de namen die eraan doorgegeven worden (eerste argument) allemaal corresponderen met namen van dingen uit het bestand (tweede argument), zonder dat dit expliciet moet gecontroleerd worden.
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand data.txt6 zich in de huidige directory bevindt.
>>> eigenschappen = lees_eigenschappen('data.txt7')
>>> eigenschappen['CHICKEN']
(10, 7, 22, -1)
>>> eigenschappen['KOI']
(50, 3, 19, 7)
>>> eigenschappen['COW']
(20, 3, 9, 2)
>>> waarden(['CHICKEN', 'KOI', 'COW', 'DOG', 'CHEETAH', 'LOBSTER'], 'data.txt8')
[10, 50, 20, 13, 10, 50]
>>> waarden(('CHICKEN', 'KOI', 'COW', 'DOG', 'CHEETAH', 'LOBSTER'), 'data.txt9', veld=1)
[7, 3, 3, 3, 7, 7]
>>> waarden(('CHICKEN', 'KOI', 'COW', 'DOG', 'CHEETAH', 'LOBSTER'), 'data.txt10', veld=3)
[-1, 7, 2, 4, 2, 1]
>>> woorden = ['CHICKEN', 'KOI', 'COW', 'DOG', 'CHEETAH', 'LOBSTER']
>>> rangschik(woorden, 'data.txt11')
>>> woorden
['CHEETAH', 'CHICKEN', 'DOG', 'COW', 'KOI', 'LOBSTER']
>>> rangschik(woorden, 'data.txt12', veld=1)
>>> woorden
['COW', 'DOG', 'KOI', 'CHEETAH', 'CHICKEN', 'LOBSTER']
>>> rangschik(woorden, 'data.txt13', veld=3, dalend=True)
>>> woorden
['KOI', 'DOG', 'COW', 'CHEETAH', 'LOBSTER', 'CHICKEN']
>>> gerangschikt(['CHICKEN', 'KOI', 'COW', 'DOG', 'CHEETAH', 'LOBSTER'], 'data.txt14')
['CHEETAH', 'CHICKEN', 'DOG', 'COW', 'KOI', 'LOBSTER']
>>> gerangschikt(('CHICKEN', 'KOI', 'COW', 'DOG', 'CHEETAH', 'LOBSTER'), 'data.txt15', veld=1)
['COW', 'DOG', 'KOI', 'CHEETAH', 'CHICKEN', 'LOBSTER']
>>> gerangschikt({'CHICKEN', 'KOI', 'COW', 'DOG', 'CHEETAH', 'LOBSTER'}, 'data.txt16', veld=3, dalend=True)
['KOI', 'DOG', 'COW', 'CHEETAH', 'LOBSTER', 'CHICKEN']
Welk dier leeft het langst?
Het dier met de langste levensduur is biologisch gezien onsterfelijk: Turritopsis dohrnii17, ook wel de "onsterfelijke kwal" genoemd. Dit kleine wezen kan tijdens zijn groei eigenlijk op de resetknop drukken18, sexueel volwassen worden en daarna naar een seksueel onvolwassen versie van zichzelf terugkeren in een proces dat transdifferentiatie19 genoemd wordt, of de praktijk van het omzetten van volwassen cellen naar een ander type weefsel. Dit proces wordt steeds intensiever bestudeerd omdat onderzoekers werken aan gentherapieën voor mensen. (Wie weet? Misschien zullen we op een dag ontdekken hoe mensen cellen kunnen transdifferentiëren net zoals deze kwallen.) Hoewel het misschien niet specifiek in jaren kan uitgedrukt worden, is wel duidelijk dat de onsterfelijke kwal de langste levensduur heeft van alle dieren.
Een specifieke soort zwart koraal — Leiopathes glaberrima20 — die technisch gezien een dier is en één van de langstlevende organismen op aarde, groeit uiterst langzaam. Een Hawaïaans exemplaar zou een leeftijd hebben van 4265 (±44) jaar.
Reuzegrote tonvormige sponzen21 — soms ook wel "de sequoia's van de oceaan" genoemd — kunnen duizenden jaren oud worden, waarbij één levend exemplaar van 2300 jaar gekend is.
Er zijn berichten over een oude noordkromp — bijgenaamd Ming — waarin sommige nieuwszenders beweren dat wetenschappers het gedood hebben22 en andere bronnen aangeven dat de hele heisa overroepen was23. Dit 507 jaar oude wezen met schelp stierf in 2006, maar zou al geleefd hebben in het tijdperk van de houten schepen!
De Groenlandse haai kwam ook in het nieuws24, omdat er examplaren gevonden waren tussen 272 en 512 jaar oud. Ze planten zich pas voort als ze ongeveer 150 jaar oud25 zijn.
Dieren zijn natuurlijk niet per se de langstlevende organismen. Die eer gaat waarschijnlijk naar een 5065 jaar oude plant, de Bristlecone-den26 (Pinus longaeva27). Als je andere factoren in rekening brengt, zoals biologische onsterfelijkheid, dan wordt het natuurlijk zeer moeilijk om de oudste organismen te rangschikken.
De kortste levensduur van een dier is één dag. De "winnaar" is in dit geval een insect — de eendagsvlieg28 — die wereldwijd in de buurt van beken en meren wordt aangetroffen. Een dag in het leven van een eendagsvlieg moet behoorlijk intens zijn!