[python-nl] Newbie vraag werken met tabeldata

Remco Gerlich remco at gerlich.nl
Thu Feb 25 13:10:56 CET 2010


2010/2/25 GewoonAnthony <gewoonanthony op gmail.com>

> Ik wil graag tabeldata gebruiken die alsvolgt is opgebouwd:
>
> Bedrag                          percentage
> 15000     -   16500          25%
> 16500     -    23000         30%


> etc
>
> Concreet:
> - hoe verwerk ik deze tabel in een variabel (een nested aray?) (en hoe
> ziet deze code eruit (gaat mij even om het principe)
>
Daar zijn veel verschillende manieren voor - een array voor de hele lijst
ligt voor de hand, maar wat daar in zit kan bijvoorbeeld een tuple, array of
dictionary zijn (of class instance...).

Een array met tuples bijv:

table = [
    (15000, 16500, 0.25),
    (16500, 23000, 0.3),
]

Dan kun je testen met een loop, bijvoorbeeld:

def find_percentage(amount):
   for minimum, maximum, percentage in table:
      if minimum <= amount < maximum:
         return amount
   return 0.0 # Default

Als later blijkt dat dit een vertragende factor is kun je eens gaan kijken
hoe het sneller kan.

   (

> - en hoe zoek ik het meest efficient bij het bijbehorende bedrag het
> percentage op. Bv doorlopen met een 'for loop'
>
Normaal is hier het antwoord "dictionary!", die kan snel bij een key de
value vinden. Helaas heb je hier een bedrag, en een tabel met ranges
(min/max gebieden). Daardoor kun je niet direct zoeken. Dus zou ik voorlopig
gewoon een loop gebruiken; als later blijkt dat het sneller moet kun je
fancy gaan doen (misschien weet je welke ranges er zijn, en kun je bij een
bedrag snel de range bepalen, en die als key voor een dictionary gebruiken;
of anders de lijst gesorteerd houden en binary search doen -- kom tegen die
tijd maar terug :-)).


> - is het efficient om veel gebruikte tabellen inderdaag in het
> geheugen te laden? En wat is de maximale omvang qua efficiency.
>
Dat ligt eraan, is heel lastig algemeen te zeggen. "Efficiency" is een vaag
begrip, ga eerst voor de simpele leesbare oplossing bij dit soort dingetjes,
als je programma later te langzaam is kun je gaan uitzoeken waar de
bottleneck zit en dan alleen daar slim gaan doen.

Remco Gerlich

>
>
> Groet,
>
> Anthony
> _______________________________________________
> Python-nl mailing list
> Python-nl op python.org
> http://mail.python.org/mailman/listinfo/python-nl
>
------------- volgend deel ------------
Een HTML-bijlage is gescrubt...
URL: <http://mail.python.org/pipermail/python-nl/attachments/20100225/957ef6ef/attachment-0001.html>


More information about the Python-nl mailing list