Física Computacional - FSC-5705

só um divisor

Vetores e Matrizes: versão padrão do python

O python disponibiliza 3 padrões diferentes de tratar vetores/matrizes, essas formas padrões podem não ser as mais adequadas para tratar problemas matemáticos, para isso é melhor utilizar as matrizes do modulo numérico contudo, esta matrizes métodos resultam muito adequados e bem-vindos na análise de dados, por isso vamos dar uma olhada nestes vetores intrínsecos do python.

Listas

Você pode construir uma lista em python de um forma muito simples, como por exemplo

            #!/usr/bin/env python
            # -*- coding:  utf-8 -*-
            
            lista1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
            lista2 = ['Galileo', 'Newton', 'Descartes', 'Leibniz', 'Huygens', 'Young',\
                      'Faraday', 'Maxwell', 'Boltzmann', 'Langevine', 'Einstein']


            print 'usando range e len para percorrer com a lista'                
            for i in range(len(lista1)):
              print lista1[i]

            print '\n'
            print 'quarto elemento da lista 2 = ', lista2[3]

            print '\n'
            print 'usando for para percorrer a lista'
            for fisico in lista2:
              print fisico

            print '\n'
            print 'numero de elementos na lista 1 = %d' % len(lista1)
            print 'menor elemento da lista 1 = %d'      % min(lista1)
            print 'maior elemento da lista 1 = %d'      % max(lista1)

            print '\n'
            print 'numero de elementos na lista 2 = %d' % len(lista2)
            print 'menor elemento da lista 2 = %s'      % min(lista2)
            print 'maior elemento da lista 2 = %s'      % max(lista2)

            print '\n'
            lista3 = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
            lista4 = lista3 + lista1
            print 'lista3 + lista1 = ', lista4

            print '\n'
            ordenaLista4  = sorted(lista4)
            print 'lista4 ordenada acendente - sorted = ', ordenaLista4

            print '\n'
            ordenaLista4 = sorted(lista4, reverse=True)
            print 'lista4 ordenada descente - sorted  = ', ordenaLista4

            print '\n'
            lista4.sort()
            print 'lista4 ordenada acendente - sort = ', lista4

            print '\n'
            lista4.sort(reverse=True)
            print 'lista4 ordenada descente - sort  = ', lista4

            print '\n'
            lista2.sort()
            print 'lista2 ordenada acendente - sort = ', lista2

            print '\n'
            lista2[3] = 'Michael Faraday'
            print 'lista2 = ', lista2

            a = lista2[-1]

            del lista2[-1]  #o elemento -1 eh o ultimo, -2 eh o antes do ultimo, etc
            print 'removido o ultimo elemento de lista2 = ', lista2

            print '\n'
            lista2.append('Young')
            print 'anexado um novo elemento na ultima posicao de lista2 = ', lista2

            print '\n'
            print 'posicao na lista 2 do Michael Faraday = ', lista2.index('Michael Faraday')

            print '\n'
            lista2.insert(2, 'Planck')
            print 'anexado um elemento na posicao 2 = ', lista2
          
[usuario@pclabfis: ]# python exemplo01.py
usando range e len para percorrer com a lista
1
2
3
4
5
6
7
8
9
10

quarto elemento da lista 2 = Leibniz

usando for para percorrer a lista
Galileo
Newton
Descartes
Leibniz
Huygens
Young
Faraday
Maxwell
Boltzmann
Langevine
Einstein

numero de elementos na lista 1 = 10
menor elemento da lista 1 = 1
maior elemento da lista 1 = 10

numero de elementos na lista 2 = 11
menor elemento da lista 2 = Boltzmann
maior elemento da lista 2 = Young

lista3 + lista1 = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

lista4 ordenada acendente - sorted = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

lista4 ordenada descente - sorted = [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

lista4 ordenada acendente - sort = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

lista4 ordenada descente - sort = [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

lista2 ordenada acendente - sort = ['Boltzmann', 'Descartes', 'Einstein', 'Faraday', 'Galileo', 'Huygens', 'Langevine', 'Leibniz', 'Maxwell', 'Newton', 'Young']

lista2 = ['Boltzmann', 'Descartes', 'Einstein', 'Michael Faraday', 'Galileo', 'Huygens', 'Langevine', 'Leibniz', 'Maxwell', 'Newton', 'Young'] removido o ultimo elemento de lista2 = ['Boltzmann', 'Descartes', 'Einstein', 'Michael Faraday', 'Galileo', 'Huygens', 'Langevine', 'Leibniz', 'Maxwell', 'Newton']

anexado um novo elemento na ultima posicao de lista2 = ['Boltzmann', 'Descartes', 'Einstein', 'Michael Faraday', 'Galileo', 'Huygens', 'Langevine', 'Leibniz', 'Maxwell', 'Newton', 'Young']

posicao na lista 2 do Michael Faraday = 3

anexado um elemento na posicao 2 = ['Boltzmann', 'Descartes', 'Planck', 'Einstein', 'Michael Faraday', 'Galileo', 'Huygens', 'Langevine', 'Leibniz', 'Maxwell', 'Newton', 'Young']

Nesse exemplo vemos a funcionalidade da lista. Até foi mostrado como ordenar uma lista utilizando a função sort (ordena e salva na mesma variável), e sorted (ordena e salva em outra variável). Na linha 25 juntei duas listas, a forma lembra a aquilo que se faz com as strings. Além dessa função (método) existem muitos outras, por exemplo a função append que permite adicionar mais elementos a uma lista

Listas de listas podem ser criadas:

          #!/usr/bin/env python
          # -*- coding: utf-8 -*-
          
          lista2x3 = []
          for i in range(3):
            lista2x3.append([0,0])
          
          print 'lista zerada'
          print lista2x3

          k = 0
          for i in range(3):
            for j in range(2):
            lista2x3[i][j] = k
            k = k + 1

          print '\nlista preenchida'   
          print lista2x3            
          
[usuario@pclabfis: ]# python exemplo01_1.py
lista zerada
[[0, 0], [0, 0], [0, 0]]

lista preenchida
[[0, 1], [2, 3], [4, 5]]

Tuplas

São iguais às listas, a principal diferença é que são imutáveis. Outra diferencia é que quando são criadas se utiliza parenteses "()" e não colchetes "[]"

          #!/usr/bin/env python
          # -*- coding: utf-8 -*-

          tupla1 = (1, 'Florianópolis', 17, 'Brasil', 5)

          tupla2 = tuple( sorted(tupla1) )

          for item in tupla2:
            print item
          
[usuario@pclabfis: ]# python exemplo02.py
1
5
17
Brasil
Florianópolis

Os métodos aplicáveis às tuplas são quase os mesmo da lista, você só deve ter em mente que a tupla não se modifica. Mas além de não se modificarem, as tuplas foram feitas pensando em que você pode agrupar coisas que estão relacionadas entre sim, por exemplo, construímos uma lista onde o primeiro elemento diz respeito à quantidade de limão, abacate, queijos, maçã, pratos, cebolas, etc. que estão na cozinha da nossa casa (o problema é lembrar qual é a ordem na lista) mas note que não existe uma relação entre eles (só o fato de estarem na cozinha), no entanto se criamos uma tupla com o endereço: Terra, América, Brasil, Santa Catarina, Florianópolis, UFSC, Física, neste caso todos os elementos estão relacionados já que falam de uma coisa (o endereço de alguém, por exemplo), nesse sentido a informação é imutável pois se vier mudar estaria indicando uma outra coisa (Tuplas, para quem programa em C são parecidas a structs ou em Fortran 90 um tipo derivado, type). Um uso das tuplas é como chaves para dicionários.

Dicionários

São estruturas onde o índice da matriz não necessariamente é um número, e sim um palavra. Dessa forma na verdade o que se tem é um conjunto de dados chave-valor onde o valor pode ser acessado a través da chave, vejamos um exemplo

          #!/usr/bin/env python
          # -*- coding:  utf-8 -*-

          fisicos = [ 'Galileo', 'Newton', 'Descartes', 'Leibniz', 'Huygens', 'Young',\
                      'Faraday', 'Maxwell', 'Boltzmann', 'Langevine', 'Einstein' ]
                      
          descobertas = [ 'relatividade clasica', 'Gravitacao Universal', \
                          'conservacao do momentum', 'vis viva', 'luz como onda', \
                          'interferencia', 'inducao eletromagnetica',\
                          'ondas eletromagneticas', 'estatstica',\
                          'eq. dif. para o mov. Browniano', \
                          'relatividade especial e geral, etc.' ]

          dic1 = dict( zip(fisicos,descobertas) )

          print '\n'
          print ' ------------------- dicionario 1:  -------------------'
          print dic1
          print '\n'


          print ' ------------------- items no dicionario 1:  -------------------'
          print dic1.items()
          print '\n'

          print ' ---------- numero de elementos no dicionario 1:  ---------'
          print len( dic1 )
          print '\n'

          lista1 = dic1.iteritems()

          print ' ------ items no dicionario 1 transformado em lista:  ------'
          for item in lista1:
            print item
          print '\n'

          print ' ----------- valores no dicionario 1:  -----------'
          for dado in dic1.values():
            print dado
          print '\n'

          print ' ------------------- chaves do dicionario 1:  -------------------'
          for dado in dic1.keys():
            print dado
          print '\n'

          dic2 = {'Galileo': 'relatividade clasica', 'Newton': 'Gravitacao Universal',\
                  'Descartes': 'conservacao do momentum', 'Leibniz': 'vis viva',\
                  'Huygens': 'luz como onda', 'Young': 'interferencia',\
                  'Faraday': 'inducao eletromagnetica',\
                  'Maxwell': 'ondas eletromagneticas',\
                  'Boltzmann': 'estatstica: equiparticao, entropia',\
                  'Langevine': 'eq. dif. para o mov. Browniano',\
                  'Einstein': 'relatividade especial e geral, etc.'}

          print ' ------------------- dicionario 2:  -------------------'
          print dic2
          print '\n'

          print ' ------------- remove um item de dicionario 2:  -------------'
          dic2.pop('Langevine')
          print dic2
          print '\n'

          print ' ------ acesso a elementos especificos do dicionario 2:  ------'
          print 'Faraday no dic1 = %s, e no dic2 = %s' % (dic1['Faraday'] , dic2['Faraday'])
          print '\n'

          dic3 = {}
          dic3['Galileo'] = 'relatividade clasica'
          dic3['Newton'] = 'Gravitacao Universal'

          print ' ------------------- dicionario 3:  -------------------'
          print dic3
          print '\n'

          print ' ------------------- apagando dicionario 3:  -------------------'
          dic3.clear()
          print dic3
          print '\n'

          dic4 = {}
          dic4 ['Newton'] = ['Gravitacao Universal', 'F=GMm/r^2']
          dic4['Einstein'] = ['relatividade especial e geral, etc.', 'E = mc^2']

          print ' -------- dicionario 4: dicionario de lista ---------'
          for dado in dic4['Newton']:
            print dado
          print '\n'

          print ' ----- checando a existencia de uma chave no dicionario 4: -----'
          print dic4.has_key('Lagrange')
          print '\n'
          
[usuario@pclabfis: ]# python exemplo03.py

------------------- dicionario 1: -------------------
{'Langevine': 'eq. dif. para o mov. Browniano', 'Descartes': 'conservacao do momentum', 'Leibniz': 'vis viva', 'Maxwell': 'ondas eletromagneticas', 'Newton': 'Gravitacao Universal', 'Young': 'interferencia', 'Boltzmann': 'estatstica', 'Einstein': 'relatividade especial e geral, etc.', 'Galileo': 'relatividade clasica', 'Faraday': 'inducao eletromagnetica', 'Huygens': 'luz como onda'}

------------------- items no dicionario 1: -------------------
[('Langevine', 'eq. dif. para o mov. Browniano'), ('Descartes', 'conservacao do momentum'), ('Leibniz', 'vis viva'), ('Maxwell', 'ondas eletromagneticas'), ('Newton', 'Gravitacao Universal'), ('Young', 'interferencia'), ('Boltzmann', 'estatstica'), ('Einstein', 'relatividade especial e geral, etc.'), ('Galileo', 'relatividade clasica'), ('Faraday', 'inducao eletromagnetica'), ('Huygens', 'luz como onda')]

---------- numero de elementos no dicionario 1: ---------
11

------ items no dicionario 1 transformado em lista: ------
('Langevine', 'eq. dif. para o mov. Browniano')
('Descartes', 'conservacao do momentum')
('Leibniz', 'vis viva')
('Maxwell', 'ondas eletromagneticas')
('Newton', 'Gravitacao Universal')
('Young', 'interferencia')
('Boltzmann', 'estatstica')
('Einstein', 'relatividade especial e geral, etc.')
('Galileo', 'relatividade clasica')
('Faraday', 'inducao eletromagnetica')
('Huygens', 'luz como onda')

----------- valores no dicionario 1: -----------
eq. dif. para o mov. Browniano
conservacao do momentum
vis viva
ondas eletromagneticas
Gravitacao Universal
interferencia
estatstica
relatividade especial e geral, etc.
relatividade clasica
inducao eletromagnetica
luz como onda

------------------- chaves do dicionario 1: -------------------
Langevine
Descartes
Leibniz
Maxwell
Newton
Young
Boltzmann
Einstein
Galileo
Faraday
Huygens

------------------- dicionario 2: -------------------
{'Young': 'interferencia', 'Huygens': 'luz como onda', 'Langevine': 'eq. dif. para o mov. Browniano', 'Descartes': 'conservacao do momentum', 'Leibniz': 'vis viva', 'Maxwell': 'ondas eletromagneticas', 'Newton': 'Gravitacao Universal', 'Boltzmann': 'estatstica: equiparticao, entropia', 'Einstein': 'relatividade especial e geral, etc.', 'Galileo': 'relatividade clasica', 'Faraday': 'inducao eletromagnetica'}

------------- remove um item de dicionario 2: -------------
{'Young': 'interferencia', 'Huygens': 'luz como onda', 'Descartes': 'conservacao do momentum', 'Leibniz': 'vis viva', 'Maxwell': 'ondas eletromagneticas', 'Newton': 'Gravitacao Universal', 'Boltzmann': 'estatstica: equiparticao, entropia', 'Einstein': 'relatividade especial e geral, etc.', 'Galileo': 'relatividade clasica', 'Faraday': 'inducao eletromagnetica'}

------ acesso a elementos especificos do dicionario 2: ------
Faraday no dic1 = inducao eletromagnetica, e no dic2 = inducao eletromagnetica

------------------- dicionario 3: -------------------
{'Galileo': 'relatividade clasica', 'Newton': 'Gravitacao Universal'}

------------------- apagando dicionario 3: -------------------
{}

-------- dicionario 4: dicionario de lista ---------
Gravitacao Universal
F=GMm/r^2

----- checando a existencia de uma chave no dicionario 4: -----
False