Når bør du bruke lister og når bør du bruke tupler i Python?
Av og til har du ikke noe valg, for eksempel hvis du har en
"hello %s you are %s years old" % x
må x være en tupel.
Men hvis det er jeg som designer API-et og velger datatypene, hvilke retningslinjer gjelder da?
Tupler har en fast størrelse, mens lister er dynamiske.
En tupel
er med andre ord uforanderlig, mens en liste
er foranderlig.
in
-operatoren for å sjekke om et element finnes i tupelen.Tupler er raskere enn lister Hvis du definerer et konstant sett med verdier og du bare skal iterere gjennom det, bør du bruke en tupel i stedet for en liste.
Det gjør koden tryggere hvis du "skrivebeskytter" data som ikke skal endres. Hvis du bruker en tupel i stedet for en liste, er det som å ha en implisitt påstand om at disse dataene er konstante, og at det kreves spesiell omtanke (og en spesifikk funksjon) for å overstyre dette.
Noen tupler kan brukes som ordboksnøkler (spesielt tupler som inneholder uforanderlige verdier som strenger, tall og andre tupler). Lister kan aldri brukes som ordboknøkler, fordi lister ikke er uforanderlige.
Kilde: Dykk ned i Python 3.
Jeg tror (og jeg er neppe særlig Python-kyndig) at hovedforskjellen er at en tupel er immutable (den kan ikke endres på plass etter tilordning) og en liste er mutable (du kan legge til, endre, trekke fra osv.).
Så jeg pleier å gjøre tupler til ting som ikke bør endres etter tilordning, og lister til ting som kan endres.
Må den være foranderlig? Bruk en liste. Må den ikke være foranderlig? Bruk en tupel.
Ellers er det et spørsmål om valg.
For samlinger av heterogene objekter (som en adresse delt inn i navn, gate, by, stat og postnummer) foretrekker jeg å bruke en tupel. De kan alltid enkelt forfremmes til named tuples.
På samme måte foretrekker jeg en liste hvis samlingen skal itereres over. Hvis det bare er en beholder for å holde flere objekter samlet, foretrekker jeg en tupel.