Map
"Map", "filter", and "reduce" are three commonly used higher-order functions in functional programming.
In Python, the built-in map function takes a function and an iterable (in this case a list) as inputs. It returns an iterator that applies the function to every item, yielding the results.

With map
, we can operate on lists without using loops and nasty stateful variables. For example:
def square(x):
return x * x
nums = [1, 2, 3, 4, 5]
squared_nums = map(square, nums)
print(list(squared_nums))
# [1, 4, 9, 16, 25]
The list type constructor, list()
converts the map
object back into a standard list.
Assignment
Markdown supports two different styles of bullet points, -
and *
. We prefer *
, so, we need a function to convert any -
bullet points to *
bullet points.
Complete the change_bullet_style
function. It takes a document (a string) as input, and returns a single string as output. The returned string should have any lines that start with a -
character replaced with a *
character.
For example, this:
- This is a bullet
- This is a bullet
Becomes:
* This is a bullet
* This is a bullet
Use the built-in map function to apply the provided convert_line
function to each line of the input string. Use .split() and .join() to split the document into a list of lines, and then join the lines back together. This should preserve the original line breaks. Don't use the .replace()
string method.
Examples of split and join:
# my_document is a string with newlines
lines_list = my_document.split("\n")
rejoined_doc = "\n".join(lines_list)
Challenge:
def change_bullet_style(document):
pass
# Don't edit below this line
def convert_line(line):
old_bullet = "-"
new_bullet = "*"
if len(line) > 0 and line[0] == old_bullet:
return new_bullet + line[1:]
return line
Solution:
def change_bullet_style(document):
return "\n".join(map(convert_line, document.split("\n")))
# Don't edit below this line
def convert_line(line):
old_bullet = "-"
new_bullet = "*"
if len(line) > 0 and line[0] == old_bullet:
return new_bullet + line[1:]
return line
Last updated