What is not working with my "map" usage?
Victor
vhnguyenn at yahoo.com
Sat Sep 22 14:18:50 EDT 2018
On Saturday, September 22, 2018 at 6:22:32 AM UTC-7, Peter Otten wrote:
> Victor via Python-list wrote:
>
> > Let me use a different input args and display them below. Basically, I am
> > hoping to add up all elements of each nested list. So at first it should
> > start with [1,11,111] ==> 1+11+111 = 123. But instead, it appears to take
> > the 1st element from each nested list to add up [1,2,3] = 6. How should
> > it be corrected? Thx.
>
> I see three options. You can
>
> (1) use a list comprehension
>
> [add_all_elements(*sub) for sub in alist]
>
> (2) replace map() with itertools.starmap()
>
> list(itertools.starmap(add_all_elements, alist))
>
> (3) change your function's signature from add_all_elements(*args) to
> add_all_elements(args), either by modifying it directly or by wrapping it
> into another function
>
> list(map(lambda args: add_all_elements(*args), alist))
>
> (3a) My personal preference would be to change the signature and then use
> the list comprehension
>
> def add_all_elements(args): ...
> [add_all_elements(sub) for sub in alist]
Hi Peter,
Thank you for your suggested solutions. They all work. But I just want to know what is wrong with my doing:
list(map(add_all_elements,*alist))
Theoretically, each list element is passed to add_all_elements. And if my alist is [[1, 11, 111], [2, 22, 222], [3, 33, 333]], then the 1st list element must be this [1,11,111] passed as args into add_all_elements.
In other words, the following should have happened:
>>> add_all_elements (*[1,11,111])
My args = (1, 11, 111)
i = 1
BEFORE total = 0
AFTER total = 1
i = 11
BEFORE total = 1
AFTER total = 12
i = 111
BEFORE total = 12
AFTER total = 123
FINAL total = 123
123
Again, thanks!
More information about the Python-list
mailing list