Getting a Map() to Return a List in Python 3.X

Getting a map() to return a list in Python 3.x

Do this:

list(map(chr,[66,53,0,94]))

In Python 3+, many processes that iterate over iterables return iterators themselves. In most cases, this ends up saving memory, and should make things go faster.

If all you're going to do is iterate over this list eventually, there's no need to even convert it to a list, because you can still iterate over the map object like so:

# Prints "ABCD"
for ch in map(chr,[65,66,67,68]):
print(ch)

Why does map return a map object instead of a list in Python 3?

I think the reason why map still exists at all when generator expressions also exist, is that it can take multiple iterator arguments that are all looped over and passed into the function:

>>> list(map(min, [1,2,3,4], [0,10,0,10]))
[0,2,0,4]

That's slightly easier than using zip:

>>> list(min(x, y) for x, y in zip([1,2,3,4], [0,10,0,10]))

Otherwise, it simply doesn't add anything over generator expressions.

Python 3 map is returning a list of NoneType objects instead of the type I modified?

This is because, your incr_number doesn't return anything. Change it to:

def incr_number(self, incr=0):
self.number += incr
return self

list object created by map,filter returns empty list

The returned object from filter works like an iterator; you can only iterate over it once:

>>> x=[1,2,3,4,5,6]
>>> odds=filter(lambda n: n%2 == 1, x)
>>> list(odds)
[1, 3, 5]
>>> list(odds)
[]

It's "used up" after the first time you loop over it (which happens in the map() line).

Same is true of the map object.

Using map() with two arguments where one argument is a list and the other an integer

You can use currying, like with partial from functools:

from functools import partial

def change_salaries(employees: list, amt: int) -> list:
return list(map(partial(change_salary, amt=amt), employees))

double convert map to list return null

The whole reason to convert a map to a list is that a map is a single-use iterator; once you iterate over it once, it's exhausted ("empty") because it doesn't actually store its contents anywhere.

A list stores all of its values and can be iterated over multiple times (it creates new iterators on demand).

The solution is to turn the map into a list once and save a reference to the list:

a=map(float, [1,2,3])
b = list(a)
# now you can iterate over b as much as you want

Note also that in place of map you can simply do a list comprehension to create a list in a single step:

a = [float(i) for i in [1, 2, 3]]
# now you can iterate over a as much as you want

Trying to map through return list of dictionary with python

Do you want to sum all digits?
in that case you can use sum function:

...
print(sum(map(switch, numbers)))

You don't need to convert map result to list since sum accepts iterables.



Related Topics



Leave a reply



Submit