Pergunta

encontro-me frequentemente a necessidade de aplicar uma sequência de funções unárias a uma sequência de do mesmo comprimento. Meu primeiro pensamento é ir com map(), no entanto, isso leva apenas uma única função a ser aplicada a todos os itens na sequência.

No código a seguir, por exemplo, eu gostaria de aplicar str.upper() ao primeiro item, e int para o segundo item em cada a. "transform" é um espaço reservado para o efeito que eu estou atrás.

COLS = tuple([transform((str.upper, int), a.split(",")) for a in "pid,5 user,8 program,28 dev,10 sent,9 received,15".split()])

Existe alguma biblioteca padrão, ou outra aplicação agradável que pode executar uma transformação como esta ordenadamente?

Foi útil?

Solução

E sobre ...:

def transform(functions, arguments):
  return [f(a) for f, a in zip(functions, arguments)]

Outras dicas

>>> s="pid,5 user,8 program,28 dev,10 sent,9 received,15".split()
>>> [ ( m.upper(),int(n)) for m, n in [i.split(",") for i in s ] ]
[('PID', 5), ('USER', 8), ('PROGRAM', 28), ('DEV', 10), ('SENT', 9), ('RECEIVED', 15)]

Atualmente estou usando o seguinte:

def transform(unaries, iterable):
    return map(lambda a, b: a(b), unaries, iterable)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top