Say I have list with elements content = ['121\n', '12\n', '2\n', '322\n']
and list with functions fnl = [str.strip, int]
.
So I need to apply each function from fnl
to each element from content
sequentially.
I can do this by several calls map
.
Another way:
xl = lambda func, content: map(func, content)
for func in fnl:
content = xl(func, content)
I'm just wondering if there is a more pythonic way to do it.
Without separate function? By single expression?
You could use the
reduce()
function in a list comprehension here:Demo:
This applies each function in turn to each element, as if you nested the calls; for
fnl = [str.strip, int]
that translates toint(str.strip(element))
.In Python 3,
reduce()
was moved to thefunctools
module; for forwards compatibility, you can import it from that module from Python 2.6 onwards:Note that for the
int()
function, it doesn't matter if there is extra whitespace around the digits;int('121\n')
works without stripping of the newline.You are describing the basic use of a list comprehension:
Note you don't need the call to
strip
to convert to integer here, some whitespace is handled fine.If your real use-case is more complex and you wish to compose arbitrarily many functions in the comprehension, however, I found the idea from here quite pythonic: