Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #6660

Re: searching in list

References <cec1aa77-86b3-4bff-8286-a84c823750d2@glegroupsg2000goo.googlegroups.com>
Date 2011-05-30 23:41 +1000
Subject Re: searching in list
From Chris Angelico <rosuav@gmail.com>
Newsgroups comp.lang.python
Message-ID <mailman.2266.1306762863.9059.python-list@python.org> (permalink)

Show all headers | View raw


On Mon, May 30, 2011 at 10:58 PM, vino19 <vinograd19@gmail.com> wrote:
> I want to make a function that is called only once per one argument. I mean I want to store data of function calling to prevent calling it again if there is no need.
> How to make it? For example I can make a global list that just consist of tuples
> [(arg1, res1), (arg2, res2), ...]. Ok, how to search if an arg135 in that list?
>
> Thanks for answering

If you're always going to look them up by the argument, the best way
would be to use a dictionary:
cache={arg1: res1, arg2: res2, ...}

Then you can search with a simple: cache[arg135]

You can add things with: cache[arg135]=res135

This works best if the argument is an immutable and fairly simple
type. For instance, you could calculate Fibonacci numbers in a naive
and straightforward way:

def fib(n,cache={}):
  if n in cache: return cache[n]
  ret=n if n<2 else fib(n-1)+fib(n-2) # This bit actually calculates fib(n)
  cache[n]=ret
  return ret

Of course, this is a poor algorithm for calculating Fibonacci numbers,
but it does demonstrate the cache. It's recursive, meaning that if it
has fib(50) in its cache and it is asked for fib(60), it will find and
make use of the cached element.

(Note the sneaky way of storing a cache dictionary. A function's
default arguments are evaluated once, so this will use the same
dictionary for every call.)

Chris Angelico

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

searching in list vino19 <vinograd19@gmail.com> - 2011-05-30 05:58 -0700
  Re: searching in list Dave Angel <davea@ieee.org> - 2011-05-30 09:27 -0400
  Re: searching in list Chris Angelico <rosuav@gmail.com> - 2011-05-30 23:41 +1000
  Re: searching in list Ian Kelly <ian.g.kelly@gmail.com> - 2011-05-30 10:32 -0600

csiph-web