You are here: > Dive Into Python > Functional Programming > Mapping lists revisited | << >> | ||||
Dive Into PythonPython from novice to pro |
You're already familiar with using list comprehensions to map one list into another. There is another way to accomplish the same thing, using the built-in map function. It works much the same way as the filter function.
>>> def double(n): ... return n*2 ... >>> li = [1, 2, 3, 5, 9, 10, 256, -3] >>> map(double, li)[2, 4, 6, 10, 18, 20, 512, -6] >>> [double(n) for n in li]
[2, 4, 6, 10, 18, 20, 512, -6] >>> newlist = [] >>> for n in li:
... newlist.append(double(n)) ... >>> newlist [2, 4, 6, 10, 18, 20, 512, -6]
![]() | map takes a function and a list[8] and returns a new list by calling the function with each element of the list in order. In this case, the function simply multiplies each element by 2. |
![]() | You could accomplish the same thing with a list comprehension. List comprehensions were first introduced in Python 2.0; map has been around forever. |
![]() | You could, if you insist on thinking like a Visual Basic programmer, use a for loop to accomplish the same thing. |
>>> li = [5, 'a', (2, 'b')] >>> map(double, li)[10, 'aa', (2, 'b', 2, 'b')]
All right, enough play time. Let's look at some real code.
filenameToModuleName = lambda f: os.path.splitext(f)[0]moduleNames = map(filenameToModuleName, files)
As you'll see in the rest of the chapter, you can extend this type of data-centric thinking all the way to the final goal, which is to define and execute a single test suite that contains the tests from all of those individual test suites.
[8] Again, I should point out that map can take a list, a tuple, or any object that acts like a sequence. See previous footnote about filter.
<< Filtering lists revisited | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | Data-centric programming >> |