Existem três funções internas que são muito úteis quando usadas com listas: filter(), map() e reduce().”Filter(function, sequence)” retorna uma sequência que consiste nos itens da sequência para a qual a função (item) é verdadeira. Se a sequence for uma string ou tupla, o resultado será do mesmo tipo; caso contrário, é sempre uma lista. Por exemplo, para calcular alguns primos:
>>> def f(x): return x % 2 != 0 and x % 3 != 0 ... >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23]
“Map(function, sequence)” chama a função(item) para cada um dos itens na sequência e retorna uma lista dos valores de retorno. Por exemplo, para calcular alguns cubos:
>>> def cube(x): return x*x*x ... >>> map(cube, range(1, 11)) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
Mais de uma seqüência pode ser passada; a função deve então ter tantos argumentos quanto houver seqüências e é chamada com o item correspondente de cada sequência (ou Nenhum, se alguma sequência for menor que outra). Por exemplo:
>>> seq = range(8) >>> def add(x, y): return x+y ... >>> map(add, seq, seq) [0, 2, 4, 6, 8, 10, 12, 14]
“Reduce(function, sequence)” retorna um único valor construído chamando a função de função binária nos dois primeiros itens da sequência, depois no resultado e no próximo item, e assim por diante. Por exemplo, para calcular a soma dos números de 1 a 10:
>>> def add(x,y): return x+y ... >>> reduce(add, range(1, 11)) 55
Se houver apenas um item na sequência, seu valor será retornado; Se a sequência estiver vazia, uma exceção será levantada.
Um terceiro argumento pode ser passado para indicar o valor inicial. Nesse caso, o valor inicial é retornado para uma sequência vazia, e a função é aplicada primeiro ao valor inicial e ao primeiro item da sequência, depois ao resultado e ao próximo item, e assim por diante. Por exemplo,
>>> def sum(seq): ... def add(x,y): return x+y ... return reduce(add, seq, 0) ... >>> sum(range(1, 11)) 55 >>> sum([]) 0
Não use a definição do exemplo de sum(): como os números de soma são uma necessidade comum, uma soma de função sum(sequence) já é fornecida e funciona exatamente assim. (Adicionado na versão 2.3 do Python)