Matrizes

Tópicos

  • Concatenação de listas usando + e *
  • Mais fatias de listas
  • Matrizes
  • Funções com matrizes

Revisão de listas

O que é impresso pelo seguinte trecho de código:

(aula11_apelido_0)



Vejamos o código acima pela ótica do codelens:

(aluna11_apelido_1)

No código acima b é uma referência ou apelido (= alias) para a mesma lista a que a está se referenciando. O trecho de código a seguir cria um cópia (= clone) de a e b será uma referência a essa cópia.

(aula11_clone_0)



Vejamos o que o codelens tem a dizer sobre o trecho de código acima.

(aula11_clone_1)

A fatia a[:] é uma cópia de a, uma fatia com todos os elementos de a. Podemos usar o : para definir qualquer fatia da lista. Por exemplo, a[1:3] produz a lista [1,2].

Concatenação de listas

Uma outra forma para manipular listas em Python é usando o operador de concatenação +. Veja o seguinte exemplo:

(aula11_concatenacao_01)

Observe que a concatenação pode ser utilizada (junto com fatias) para inserir e/ou remover elementos em qualquer posição da lista. Porém, diferentemente do método append, a concatenação cria uma nova lista contendo o resultado.

Múltiplas concatenações de listas podem ser realizadas pelo operador *. Assim, para se criar uma lista com 5 zeros podemos escrever:

(aula11_concatenacao_02)

Criação de matrizes

Matrizes são estruturas bidimensionais (tabelas) com m linhas por n colunas muito importantes na matemática, utilizadas por exemplo para a resolução de sistemas de equações e transformações lineares.

Em Python, uma matriz pode ser representada como uma lista de listas, onde um elemento da lista contém uma linha da matriz, que por sua vez corresponde a uma lista com os elementos da coluna da matriz.

Qual o problema do seguinte pedaço de código para criação de uma matriz A com 5 linha e 5 colunas com o valor 2 na posição [1][1] e zero nas demais posições?

(crie_matriz_0)

A variável linha_com_zeros contém uma referência à lista [0, 0, 0, 0, 0]. No trecho de código acima, na tentativa de cria uma matriz A, essa mesma referência é copiada 5 vezes.

Para criarmos uma matriz é necessário criarmos 5 linhas diferentes como por exemplo:

(crie_matriz_1)

Podemos ainda criar uma matriz de zeros utilizando uma função como

(crie_matriz_2)

Veja a seguir uma versão errada da função crie_matriz(). Nessa versão cada linha da matriz é um apelido de uma mesma lista.

(crie_matriz_errada)

Exercícios

Exercício 11.1

Escreva a função a leia_matriz() a seguir. Abaixo esta um exemplo com um passo a passo da execução da função.

>>> a = leia_matriz()
Digite o número de linhas: 3
Digite o número de colunas: 4
matriz = []
linha 0 = []
Digite o elemento (0,0): 1
linha 0 = [1]
Digite o elemento (0,1): 2
linha 0 = [1, 2]
Digite o elemento (0,2): 3
linha 0 = [1, 2, 3]
Digite o elemento (0,3): 4
linha 0 = [1, 2, 3, 4]
matriz = [[1, 2, 3, 4]]
linha 1 = []
Digite o elemento (1,0): 5
linha 1 = [5]
Digite o elemento (1,1): 6
linha 1 = [5, 6]
Digite o elemento (1,2): 7
linha 1 = [5, 6, 7]
Digite o elemento (1,3): 8
linha 1 = [5, 6, 7, 8]
matriz = [[1, 2, 3, 4], [5, 6, 7, 8]]
linha 2 = []
Digite o elemento (2,0): 9
linha 2 = [9]
Digite o elemento (2,1): 10
linha 2 = [9, 10]
Digite o elemento (2,2): 11
linha 2 = [9, 10, 11]
Digite o elemento (2,3): 12
linha 2 = [9, 10, 11, 12]
matriz = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> a

(aula11_ex111_tentativa)



Exercício 11.2

Escreva a função a abaixo:

(aula11_ex112_tentativa)



Exercício 11.3

Escreva a função a abaixo:

(aula11_ex113_tentativa)



Exercício 11.4

Escreva um programa que lê n e uma matriz A de inteiros de dimensão n x n, e verifica se A é simétrica.

      0     1     2     3
   +-----+-----+-----+-----+
0  | 11  | -3  |  4  |  8  |
   +-----+-----+-----+-----+
1  | -3  | 12  |  6  | 11  |
   +-----+-----+-----+-----+
2  |  4  |  6  |  5  | 13  |
   +-----+-----+-----+-----+
3  |  8  | 11  | 13  |  5  |
   +-----+-----+-----+-----+

Sugestões: utilize as funções leia_matriz(), imprima_matriz() e simetrica() dos exercícios anteriores.

(aula11_ex114_tentativa)



Exercício 11.5

Escreva um programa que leia inteiros positivos m e n e os elementos de uma matriz A de números inteiros de dimensão m x n e conta o número de linhas e colunas que tem apenas zeros.

Matriz: 4 x 5
     0     0     0     0     1
     0     0     0     0     0
     0     1     0     0     0
     0     0     0     0     0
Linhas  nulas = 2
Colunas nulas = 3

(aula11_ex115_tentativa)



Exercício 11.6

Escreva a função a abaixo:

(aula11_ex116_tentativa)



Exercício 11.7

Escreva um programa que leia duas matrizes, a matriz A de dimensão m x n e B de dimensão n x p e imprime a matriz C de dimensão m x p que é o produto de A por B.

Sugestões: utilize as funções leia_matriz(), imprima_matriz() e multiplica_matriz() dos exercícios anteriores.

(aula10_ex117_tentativa)



Leitura complementar

A leitura e vídeos sugeridos aqui, em geral, contém (muito?) mais tópicos do que os que vistos durante a aula. Os tópicos não vistos na aula serão cobertos em algum momento mais oportuno.

Leitura das seções:

do capítulo Listas do livro interativo Como pensar como um Cientísta da Computação.