6.3.6 List mapping and filtering

The methods filter(f), map(f) and reduce(f) can be used to perform actions on all of the members of a list in turn. filter(f) takes a function of one argument as its argument, and returns a new list of all of the members x of the original list for which f(x) tests true. For example:

pyxplot> txt = "once upon a time, there was a"
pyxplot> list = txt.split()
pyxplot> longWord(x) = x.len()$>$3
pyxplot> print list.filter(longWord)
["once", "upon", "time,", "there"]

The method map(f) also takes a function of one argument as its argument, and returns a list of the results f(x) for each of the members x of the original list. In other words, if f were sin, and the original list contained values of x, the result would be a list of values of sin(x). This example converts a list of numbers into Roman numerals:

pyxplot> factors = primeFactors(1001)
pyxplot> print factors
[7, 11, 13]
pyxplot> romanFactors = factors.map(romanNumeral)
pyxplot> print romanFactors
["VII", "XI", "XIII"]

The method reduce(f) takes a function of two arguments as its argument. It first calls $f(a,b)$ on the first two elements of the list, and then continues through the list calling $f(a,b)$ on the result and the next item in the list. The final result is returned:

pyxplot> multiply(x,y) = x*y
pyxplot> factors = primeFactors(1001)
pyxplot> print factors.reduce(multiply)
1001