[python-brasil] Operações Matemáticas com Listas

2,101 views
Skip to first unread message

elbatiston

unread,
Jun 10, 2008, 8:48:09 AM6/10/08
to python...@yahoogrupos.com.br
Bom dia,

Estou precisando efetuar operações matemáticas (soma, subtração,
multiplicação e divisão) com listas, mas não sei como fazer.

Por exemplo: Lista C = Lista A + Lista B

Ou: Lista C = Lista A * Lista B

Não sei como implementar isso, alguem poderia ajudar???

Desde já agradeço,

Evandro


------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Thiago F. Pappacena

unread,
Jun 10, 2008, 9:28:24 AM6/10/08
to python...@yahoogrupos.com.br
2008/6/10 elbatiston <elbat...@yahoo.com.br>:

> Bom dia,
>
> Estou precisando efetuar operações matemáticas (soma, subtração,
> multiplicação e divisão) com listas, mas não sei como fazer.
>
> Por exemplo: Lista C = Lista A + Lista B
>
> Ou: Lista C = Lista A * Lista B
>
> Não sei como implementar isso, alguem poderia ajudar???

Talvez seja isso que você quer: http://numpy.scipy.org/


--
[]'s,
Thiago F. Pappacena

"O cérebro é uma coisa maravilhosa.
Todos deveriam ter um."

Guilherme Polo

unread,
Jun 10, 2008, 9:35:02 AM6/10/08
to python...@yahoogrupos.com.br
2008/6/10 elbatiston <elbat...@yahoo.com.br>:

> Bom dia,
>
> Estou precisando efetuar operações matemáticas (soma, subtração,
> multiplicação e divisão) com listas, mas não sei como fazer.
>
> Por exemplo: Lista C = Lista A + Lista B
>
> Ou: Lista C = Lista A * Lista B
>
> Não sei como implementar isso, alguem poderia ajudar???
>
> Desde já agradeço,
>
> Evandro
>

Voce precisa definir alguns metodos __especiais__ na sua classe Lista,
http://docs.python.org/ref/numeric-types.html

--
-- Guilherme H. Polo Goncalves

edbash

unread,
Jun 10, 2008, 1:07:28 PM6/10/08
to python...@yahoogrupos.com.br
Evandro.

Acho que não é o seu caso, pelo que li, mas fazer operações
matemáticas com os elementos é simples.
Veja o exemplo:
listaum=[1,2,3,5]
listadois=[10,20,30,40]
listaum[0]+listadois[0]
11
ou
listaum[3]*listadois[2]
150

Se servir, valeu

EdgardCosta

elbatiston

unread,
Jun 10, 2008, 11:36:25 AM6/10/08
to python...@yahoogrupos.com.br
Obrigado Thiago!

A ferramenta numérica para python parece ser excelente, entretanto
para minha aplicação não sei se consigo aplica-la, pois vou utilizar
o python para escrever um script para calcular rotinas para um
software específico. Assim seria melhor utilizar as ferramentas
básicas do software.

Além disso, estou utilizando software da empresa, e não tenho
permissão de administrador!

De qualquer forma, muito obrigado pela dica.

Se tiver mais alguma idéia, ficarei grato.

Obrigado,

Evandro

--- Em python...@yahoogrupos.com.br, "Thiago F. Pappacena"
<pappacena@...> escreveu
>
> 2008/6/10 elbatiston <elbatiston@...>:

Bruno Gola

unread,
Jun 10, 2008, 6:10:38 PM6/10/08
to python...@yahoogrupos.com.br
Olá

2008/6/10 elbatiston <elbat...@yahoo.com.br>:


> Por exemplo: Lista C = Lista A + Lista B

Se você não quer usar Numpy, você pode fazer algo do tipo (não faço
ideia se é eficiente ou não, se é a melhor forma ou não):

>>> x = [1,2,3,4]
>>> y = [2,3,4,5]
>>> z = map(sum, zip(x,y))
>>> z
[3, 5, 7, 9]

> Ou: Lista C = Lista A * Lista B

da mesma forma:

>>> z = map(lambda t: t[0]*t[1], zip(x,y))
>>> z
[2, 6, 12, 20]

Agora, pra isso ficar mais "bonito" no código, você pode fazer como o
Guilherme falou:

>>> class MyList(list):
... def __add__(self, other):
... return map(sum, zip(self, other))
... def __mul__(self, other):
... return map(lambda t: t[0]*t[1], zip(self, other))
...
>>> x = MyList((1,2,3,4,5))
>>> y = MyList((4,5,6,7,8))
>>> x + y
[5, 7, 9, 11, 13]
>>> x * y
[4, 10, 18, 28, 40]

Esse era o coportamento esperado?

[]'s,
--
Bruno Fialho Marques Gola <brun...@gmail.com>
http://www.brunogola.com.br
Cel: (11) 9294-5883

Leonardo Santagada

unread,
Jun 10, 2008, 8:06:10 PM6/10/08
to python...@yahoogrupos.com.br

On 10/06/2008, at 19:10, Bruno Gola wrote:

>>>>
>>>> z = map(lambda t: t[0]*t[1], zip(x,y))
>>>> z
> [2, 6, 12, 20]


código feio hein?

>>> z = [ i*j for i,j in zip(x,y)]

tão mais bonito (nem vou falar q é mais eficiente tb, pq código mais
bonito é sempre código melhor :) )

--
Leonardo Santagada

Marcelo Gosling

unread,
Jun 11, 2008, 1:08:10 AM6/11/08
to python...@yahoogrupos.com.br
Aí, Leonardo, eu acho esse aqui mais bonito (mas talvez por eu estar
aprendendo Scheme):

z = map(sum, zip(x,y))

com a vantagem que você pode fazer com quantas listas quiser:

w = map(sum, zip(x,y,z))

Abraços,

Marcelo

2008/6/10 Leonardo Santagada <sant...@gmail.com>:

Paul Eipper

unread,
Jun 11, 2008, 3:54:02 AM6/11/08
to python...@yahoogrupos.com.br
Em 11/06/08, Marcelo Gosling<marcelo...@gmail.com> escreveu:

> Aí, Leonardo, eu acho esse aqui mais bonito (mas talvez por eu estar
> aprendendo Scheme):
>
>
> z = map(sum, zip(x,y))

Também gosto dessa, mas ela faz uma operação diferente :)


Às vezes eu gostaria que os operadores fossem funções... hm... opa, eles são!

z = map(int.__mul__, x, y)

;D

--
Paul Eipper

Roberto De Almeida

unread,
Jun 11, 2008, 7:10:46 AM6/11/08
to python...@yahoogrupos.com.br
2008/6/11 Paul Eipper <lkra...@gmail.com>:

> Às vezes eu gostaria que os operadores fossem funções... hm... opa, eles
> são!
>
> z = map(int.__mul__, x, y)

Sem esquecer do fantastico modulo operator:

from operator import __mul__
z = map(__mul__, x, y)

--Roberto

Guilherme Polo

unread,
Jun 11, 2008, 7:38:42 AM6/11/08
to python...@yahoogrupos.com.br
2008/6/11 Roberto De Almeida <rob...@dealmeida.net>:

> 2008/6/11 Paul Eipper <lkra...@gmail.com>:
>
>> Às vezes eu gostaria que os operadores fossem funções... hm... opa, eles
>> são!
>>
>> z = map(int.__mul__, x, y)
>
> Sem esquecer do fantastico modulo operator:
>
> from operator import __mul__

O mais certo eh voce usar operator.mul (add, etc..), se nao nem usa o modulo.

> z = map(__mul__, x, y)
>
> --Roberto

--
-- Guilherme H. Polo Goncalves

------------------------------------

elbatiston

unread,
Jun 11, 2008, 10:42:40 AM6/11/08
to python...@yahoogrupos.com.br
Bom dia,

Gostaria de agradecer pela ajuda dos amigos, as soluções sugeridas
são excelentes.

Gostaria de esclarecer uma dúvida que surgiu, existe algum comando
equivalente ao "sum" para subtração e multiplicação??? Para usar a
formula "z = map(sum, zip(x,y,k))"

Ou a unica solução seria:

"z = map(lambda t: t[0]*t[1], zip(x,y))"

ou


"z = [ i*j for i,j in zip(x,y)"

Estive lendo o "Python Library Reference" sobre os comandos "sum"
e "zip" e não ficou muito claro seu significado (estou começando a
aprender Python e tem algumas sintaxes que me confundem um pouco).


Só para vocês terem idéia de um dos cálculos que tenho que efetuar:

RPF=(a*b*c*MBL*RCP*FEP)
sendo:
a, b, c - valores numéricos (ex.: 0.115)
MBL, RC, FE - listas
estas listas representam um sólido
tridimensionam, com 262x365x43, totalizando mais de 4.1 Milhões de
Valores!!!

Este é a fórmula mais fácil, as mais complexas deverão envolver
condições de cálculo, envolvendo lógica. Além de possuirem mais
variáveis.

Assim que finalizar o trabalho pretendo divulgar os resultados para
compartilhar o aprendizado.

Valeu,

Evandro


--- Em python...@yahoogrupos.com.br, "Bruno Gola" <brunogola@...>
escreveu
>
> Olá
>
> 2008/6/10 elbatiston <elbatiston@...>:

> Bruno Fialho Marques Gola <brunogola@...>

Pedro Werneck

unread,
Jun 11, 2008, 11:03:21 AM6/11/08
to python...@yahoogrupos.com.br
On Wednesday 11 June 2008 11:42:40 elbatiston wrote:
> Bom dia,
>
> Gostaria de agradecer pela ajuda dos amigos, as soluções sugeridas
> são excelentes.
>
> Gostaria de esclarecer uma dúvida que surgiu, existe algum comando
> equivalente ao "sum" para subtração e multiplicação???

reduce() com operator.mul ou lambda x, y: x*y

> Para usar a
> formula "z = map(sum, zip(x,y,k))"
>
> Ou a unica solução seria:
> "z = map(lambda t: t[0]*t[1], zip(x,y))"
> ou
> "z = [ i*j for i,j in zip(x,y)"

A segunda opção é bem melhor...


> Estive lendo o "Python Library Reference" sobre os comandos "sum"
> e "zip" e não ficou muito claro seu significado (estou começando a
> aprender Python e tem algumas sintaxes que me confundem um pouco).

sum(x) soma todos items da sequencia x e retorna o resultado

zip(x, y) retorna uma lista com com [(x[0], y[0]), (x[1], y[1]), (x[n],y[n])],
truncada pela lista menor.

> Só para vocês terem idéia de um dos cálculos que tenho que efetuar:
>
> RPF=(a*b*c*MBL*RCP*FEP)
> sendo:
> a, b, c - valores numéricos (ex.: 0.115)
> MBL, RC, FE - listas
> estas listas representam um sólido
> tridimensionam, com 262x365x43, totalizando mais de 4.1 Milhões de
> Valores!!!
>
> Este é a fórmula mais fácil, as mais complexas deverão envolver
> condições de cálculo, envolvendo lógica. Além de possuirem mais
> variáveis.
>

Use numpy

--
Pedro Werneck

Roberto De Almeida

unread,
Jun 11, 2008, 11:27:00 AM6/11/08
to python...@yahoogrupos.com.br
2008/6/11 Pedro Werneck <pjwe...@gmail.com>:

>> Este é a fórmula mais fácil, as mais complexas deverão envolver
>> condições de cálculo, envolvendo lógica. Além de possuirem mais
>> variáveis.
>
> Use numpy

+1, nao vale a pena reinventar a roda. Voce nao precisa de senha de
root/administrador pra instalar o numpy, e esta tudo la, ordens de
grandeza mais rapido do que voce vai conseguir implementar com listas.

--Roberto

Carlos da Silva Santos

unread,
Jun 11, 2008, 1:16:28 PM6/11/08
to python...@yahoogrupos.com.br
2008/6/11 elbatiston <elbat...@yahoo.com.br>:

>
> Gostaria de esclarecer uma dúvida que surgiu, existe algum comando
> equivalente ao "sum" para subtração e multiplicação??? Para usar a
> formula "z = map(sum, zip(x,y,k))"
>

Para multiplicação até dá para fazer. Para operações não-comutativas a
coisa fica mal definida.

[]s
Carlos

Reply all
Reply to author
Forward
0 new messages