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
Talvez seja isso que você quer: http://numpy.scipy.org/
--
[]'s,
Thiago F. Pappacena
"O cérebro é uma coisa maravilhosa.
Todos deveriam ter um."
Voce precisa definir alguns metodos __especiais__ na sua classe Lista,
http://docs.python.org/ref/numeric-types.html
--
-- Guilherme H. Polo Goncalves
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
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@...>:
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
>>>>
>>>> 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
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>:
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
Sem esquecer do fantastico modulo operator:
from operator import __mul__
z = map(__mul__, x, y)
--Roberto
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
------------------------------------
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@...>
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
+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
Para multiplicação até dá para fazer. Para operações não-comutativas a
coisa fica mal definida.
[]s
Carlos