Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run an operation on a collection in Python and collect the results?

How to run an operation on a collection in Python and collect the results?

So if I have a list of 100 numbers, and I want to run a function like this for each of them:

Operation ( originalElement, anotherVar ) # returns new number.

and collect the result like so:

result = another list...

How do I do it? Maybe using lambdas?

like image 250
Joan Venge Avatar asked Mar 09 '09 21:03

Joan Venge


2 Answers

List comprehensions. In Python they look something like:

a = [f(x) for x in bar]

Where f(x) is some function and bar is a sequence.

You can define f(x) as a partially applied function with a construct like:

def foo(x):
    return lambda f: f*x

Which will return a function that multiplies the parameter by x. A trivial example of this type of construct used in a list comprehension looks like:

>>> def foo (x):
...     return lambda f: f*x
... 
>>> a=[1,2,3]
>>> fn_foo = foo(5)
>>> [fn_foo (y) for y in a]
[5, 10, 15]

Although I don't imagine using this sort of construct in any but fairly esoteric cases. Python is not a true functional language, so it has less scope to do clever tricks with higher order functions than (say) Haskell. You may find applications for this type of construct, but it's not really that pythonic. You could achieve a simple transformation with something like:

>>> y=5
>>> a=[1,2,3]
>>> [x*y for x in a]
[5, 10, 15]
like image 139
ConcernedOfTunbridgeWells Avatar answered Sep 30 '22 11:09

ConcernedOfTunbridgeWells


Another (somewhat depreciated) method of doing this is:

def kevin(v): return v*v

vals = range(0,100)

map(kevin,vals)

like image 44
kkubasik Avatar answered Sep 30 '22 12:09

kkubasik