Lets say I have a list like this:
list_of_lists = [['how to apply'],['a function'],['to each list?']]
And I have a function let's say I want to apply the F
function to each sublist of the F
function can compute some score about two lists. How can apply this F
function to each list of list_of_lists
and return each score in a new list like this:
new_list = [score_1, score_2, score_3]
I tried with the map
function the following:
map(F, list_of_lists).append(new_list)
Map is your friend! map
takes a function and an iterable (list, for example) and applies the function on each element of the list.
map(len, [['how to apply'],['a function'],['to each list?']])
Output
[1, 1, 1]
If you wanted to do more granular calculation on elements of the sublist, you can nest the map:
map(lambda x: map(lambda y: y + 1, x), [[1], [1, 2], [1, 2, 3]])
Output
[[2], [2, 3], [2, 3, 4]]
Another possible approach (also from functional programming) are list comprehensions. List comprehension is a way of constructing a list from iterable in Python. The syntax is [element for element in iterable]
. Any computation can be done on the element, so
[f(element) for element in iterable]
means that the resulting list will be a list of elements, where each element is the result of function f. Like map, list comprehension can be further nested, resulting in a nested element function application.
[element + 1 for element in el] for el in [[1], [1, 2], [1, 2, 3]]]
Output
[[2], [2, 3], [2, 3, 4]]
You can use the builtin map
to do this.
So if the function you want to apply is len
, you would do:
>>> list_of_lists = [['how to apply'],['a function'],['to each list?']]
>>> map(len, list_of_lists)
[1, 1, 1]
In Python3
, the above returns a map iterator, so you will need an explicit list
call:
>>> map(len, list_of_lists)
<map object at 0x7f1faf5da208>
>>> list(map(len, list_of_lists))
[1, 1, 1]
If you are looking to write some code for this which has to be compatible in both Python2 and Python3, list comprehensions are the way to go. Something like:
[apply_function(item) for item in list_of_lists]
will work in both Python 2 and 3 without any changes.
However, if your input list_of_lists is huge, using map
in Python3 would make more sense because the iterator will be much faster.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With