| | | |

Algoritmos e Programação I

2 Linguagem de programação

Compre o e-book deste material aqui! Consulte outras formas de colaborar.

2.7 Coleção de dados

Objetos da classe de dados int e float permitem a alocação de um valor numérico por variável. Já, string é um coleção (sequência) de caracteres. Nesta seção, vamos estudar sobre classes de dados básicos que permitem a alocação de uma coleção de dados em uma única variável.

2.7.1 set

Em Python, set é uma classe de dados para a alocação de um conjunto de objetos. Assim como na matemática, um set é uma coleção de itens não indexada, imutável e não admite itens duplicados.

A alocação de um set pode ser feita como no seguinte exemplo:

1a = {-3.7, 1, 'amarelo'}
2print('a =', a)
3print('type =', type(a))
a = {1, -3.7, 'amarelo'}
type = <class 'set'>

Observamos que a ordem dos elementos é arbitrária, uma vez que set é uma coleção de itens não indexada.

O método set() também pode ser usado para criar um conjunto. Por exemplo, o conjunto vazio pode ser criado como segue:

1b = set()
2print('b =', b)
3print('type =', type(b))
b = set()
type = <class 'set'>

O método len pode ser usado para obtermos o tamanho (número de elementos) de um set:

1print('#a =', len(a))
2print('#b =', len(b))
#a = 3
#b = 0

Operadores de comparação

Os seguintes operadores de comparação estão disponíveis para sets:

  • x in a pertencimento

    Verifica se xa.

    1a = {1, -3.7, 'amarelo'}
    2print('1 in a =', 1 in a)
    3print('"mar" in a =', 'mar' in a)
    1 in a = True
    "mar" in a = False
  • a == b igualdade

    Verifica se a=b.

    1a == a
    True
  • a != b diferente

    Verifica se ab.

    1b = {'amarelo', -3.7}
    2a != b
    True
  • a <= b contido em ou igual a (subconjunto)

    Verifica se ab.

    1b <= a
    True
  • < contido em e não igual a (subconjunto próprio)

    Verifica se ab.

    1print('a < a =', a < a)
    2print('b < a =', b < a)
    a < a = False
    b < a = True
  • >= contém ou é igual a (subconjunto)

    Verifica se ab.

    1a >= b
    True
  • > contém e não é igual a (subconjunto próprio)

    Verifica se ab.

    1print('a > b =', a > b)
    2print('b > b =', b > b)
    a > b = True
    b > b = False

Operações com conjuntos

Em Python, as seguintes operações com conjuntos estão disponíveis:

  • a | b união

    Retorna o set equivalente a

    ab:={x:xaxb} (2.44)
    1a = {1, -3.7, 'amarelo'}
    2b = {'mar', -5}
    3a | b
    {1, 'amarelo', 'mar', -5, -3.7}
  • a & b interseção

    Retorna o set equivalente a

    ab:={x:xaxb} (2.45)
    1a = {1, -3.7, 'amarelo'}
    2b = {'mar', 1, -3.7, -5}
    3a & b
    {1, -3.7}
  • - diferença

    Retorna o set equivalente a

    ab:={x:xaxb} (2.46)
    1a - b
    {'amarelo'}
  • ^ diferença simétrica

    Retorna o set equivalente a

    aΔb:=(ab)(ba) (2.47)
    1a ^ b
    {'amarelo', 'mar', -5}

2.7.2 tuple

Em Python, tuple é uma sequência de objetos, indexada e imutável. São similares as n-uplas2626endnote: 26Pares (duplas), triplas, quadruplas ordenadas, etc. em matemática. A alocação é feita com uso de parênteses e os elementos separados por vírgula, por exemplo,

1a = (1, -3.7, 'amarelo', -5)
2type(a)
<class 'tuple'>

Indexação e fatiamento

O tamanho de um tuple é sua quantidade de objetos e pode ser obtido com o método len(), por exemplo,

1a = (1, -3.7, 'amarelo', -5, {-3,1})
2len(a)
5

Os itens são indexados como segue

(105,3.714,’amarelo’23,532,{3,1}41) (2.48)

A referência a um objeto do tuple pode ser feita com

1a[2]
'amarelo'
1a[-1]
{1, -3}

Analogamente a strings, pode-se fazer o fatiamento de tuples usando-se o operador :. Por exemplo,

1a[:2]
(1, -3.7)
1a[1:5:2]
(-3.7, -5)
1a[::-1]
({1, -3}, -5, 'amarelo', -3.7, 1)

Operações com tuples

Os mesmos operadores de comparação para sets estão disponíveis para tuples (consulte a Subseção 2.7.1). Por exemplo,

1-5 in a
True
1a[::-1] == a[-1:-6:-1]
True
1a != a[::-1]
True
1a[:2] < a
True
Observação 2.7.1 (Igualdade entre tuples).

Dois tuples são iguais quando contém os mesmos elementos e na mesma ordem.

Há, também, operadores para a concatenação e repetição:

  • + concatenação

    1a = (1,2)
    2b = (3,4,5)
    3a+b
    (1, 2, 3, 4, 5)
  • * : repetição

    1a*3
    (1, 2, 1, 2, 1, 2)
Observação 2.7.2 (Permutação de variáveis).

Dizemos que um código é pythônico quando explora a linguagem para escrevê-lo de forma sucinta e de fácil compreensão. Por exemplo, a permutação de variáveis é classicamente feita como segue

1x = 1
2y = 2
3# buffer
4z = x
5x = y
6y = z
7x, y
(2, 1)

Note que na última linha, um tuple foi criado. Ou seja, a criação de tuples não requer o uso de parênteses, basta colocar os objetos separados por vírgulas. Podemos explorar isso e escrevermos o seguinte código pythônico para a permutação de variáveis:

1x, y = y, x
2print('x =', x)
3print('y =', y)
x = 1
y = 2

2.7.3 list

Em Python, list é uma classe de objetos do tipo lista, é uma coleção de objetos indexada e mutável. Para a criação de uma lista, usamos colchetes:

1a = [1, -3.7, 'amarelo', -5, (-3,1)]
2type(a)
list
1print('a[2] =', a[2])
2print('a[1::2] =', a[1::2])
a[2] = amarelo
a[1::2] = [-3.7, -5]
Exemplo 2.7.1 (Vetores alocados como lists).

Sejam dados dois vetores

v=(v1.v2,v3), (2.49)
w=(w1,w2,w3). (2.50)

O produto interno vw é calculado por

vw:=v1w1+v2w2+v3w3. (2.51)

O seguinte código, aloca os vetores

v=(1,2,1), (2.52)
w=(3,1,4) (2.53)

usando lists, computa o produto interno vw e imprime o resultado.

1v = [-1, 2, 1]
2w = [3, -1, 4]
3p = v[0]*w[0] \
4    + v[1]*w[1] \
5    + v[2]*w[2]
6print(f'v.w = {p}')
Exemplo 2.7.2 (Matrizes e listas encadeadas).

Consideramos a matriz

A=[1113] (2.54)

Podemos alocá-la por linhas pelo encadeamento de lists, i.e.

1A = [[-1,1],[1,3]]
2A
[[-1, 1], [1, 3]]

Com isso, podemos obter a segunda linha da matriz com

1A[1]
[1, 3]

Ou ainda, podemos obter o elemento da segunda linha e primeira coluna com

1A[1][0]
1
Observação 2.7.3 (Operadores).

Os operadores envolvendo tuple são análogos para lists. Por exemplo,

1a = [1,2]
2b = [3,4]
3print('a + b =', a + b)
4print('2*a =', 2*a)
5print('a <= a =', a <= a)
a + b = [1, 2, 3, 4]
2*a = [1, 2, 1, 2]
a <= a = True

Modificações em lists

list é uma classe de objetos mutável, i.e. permite que a coleção de objetos que a constituem seja alterada. Pode-se fazer a alteração de itens usando-se suas posições, por exemplo

1a = [1, -3.7, 'amarelo', -5, (-3,1)]
2a[1] = 7.5
3print('a =', a)
a = [1, 7.5, 'amarelo', -5, (-3, 1)]
1a[1:3] = ['mar', -2.47]
2print('a =', a)
a = [1, 'mar', -2.47, -5, (-3, 1)]

Tem-se disponíveis os seguintes métodos para a modificação de lists:

  • del deleta elemento(s)

    1del a[:2]
    2print('a =', a)
    a = [-2.47, -5, (-3, 1)]
  • list.insert inserção de elemento(s)

    1a.insert(1, 'azul')
    2a
    [-2.47, 'azul', -5, (-3, 1)]
  • list.append anexa um novo elemento

    1a.append([2,1])
    2a
    [-2.47, 'azul', -5, (-3, 1), [2, 1]]
  • list.extend estende com novos elementos dados

    1del a[-1]
    2a.extend([2,1])
    3a
    [-2.47, 'azul', -5, (-3, 1), 2, 1]
    1a += [3]
    2a
    [-2.47, 'azul', -5, (-3, 1), 2, 1, 3]
Observação 2.7.4 (Cópia de objetos).

Em Python, dados têm um único identificador, por isso temos

1a = [1,2,3]
2b = a
3b[1] = 4
4a
[1, 4, 3]

Para fazermos uma cópia de uma list, podemos usar o método list.copy. Com isso, temos

1a = [1,2,3]
2b = a.copy()
3b[1] = 4
4print('a =', a)
5print('b =', b)
a = [1, 2, 3]
b = [1, 4, 3]

2.7.4 dict

Em Python, um dicionário dict é uma coleção de objetos em que cada elemento está associado a uma chave. Como chave podemos usar qualquer dado imutável (int, float, str, etc.). Criamos um dict ao alocarmos um conjunto de chaves:valores:

1x = {'nome': 'Fulane', 'idade': 19}
2x
{'nome': 'Fulane', 'idade': 19}
1y = {3: 'número inteiro', 3.14: 'pi', 2.71: 2}
2y
{3: 'número inteiro', 3.14: 'pi', 2.71: 2}

Observamos que {} cria um dicionário vazio, por exemplo

1d = {}
2type(d)
<class 'dict'>

Acessamos um valor no dict referenciando-se sua chave, por exemplo

1x['idade']
19
1y[3]
'número inteiro'

Podemos obter a lista de chaves de um dict da seguinte forma

1list(x)
['nome', 'idade']
1list(y)
[3, 3.14, 2.71]
Exemplo 2.7.3.

Consideramos o triângulo de vértices {(0,0), (1,0), (0,1)}. Alocamos um dicionário contendo os vértices do triangulo

1tria = {'A': (0,0), 'B': (1,0), 'C': (0,1)}
2tria
{'A': (0, 0), 'B': (1, 0), 'C': (0, 1)}

Para recuperarmos o valor do segundo vértice, por exemplo, digitamos

1tria['B']
(1, 0)

Em um dict, valores podem ser modificados, por exemplo,

1x['nome'] = 'Fulana'
2x
{'nome': 'Fulana', 'idade': 19}

A inserção de uma nova associação chave:valor estende um dict, por exemplo

1x['altura'] = 171
2x
{'nome': 'Fulana', 'idade': 19, 'altura': 171}
Exemplo 2.7.4.

No Exemplo 2.7.3, alocamos o dicionário tria contendo os vértices de um dado triângulo. Agora, vamos computar o comprimento de cada uma de suas arestas e alocar o resultado no próprio dict. A distância entre dois pontos A=(a1,a2) e B=(b1,b2) pode ser calculada por

d(A,b):=(b1a1)2+(a2b2)2 (2.55)

Segue nosso código:

1# vértices do triangulo
2tria = {'A': (0,0), 'B': (1,0), 'C': (0,1)}
3# aresta AB
4tria['AB'] = ((tria['B'][0] - tria['A'][0])**2 \
5    + (tria['B'][1] - tria['A'][1])**2)**0.5
6# aresta BC
7tria['BC'] = ((tria['C'][0] - tria['B'][0])**2 \
8    + (tria['C'][1] - tria['B'][1])**2)**0.5
9# aresta AC
10tria['AC'] = ((tria['C'][0] - tria['A'][0])**2 \
11    + (tria['C'][1] - tria['A'][1])**2)**0.5
12# novo dicionário
13print(tria)

Verifique!

2.7.5 Exercícios

E. 2.7.1.

Complete as lacunas.

  1. a)

    Um set é uma coleção de dados não indexada, imutável e não admite itens duplicados.

  2. b)

    Um tuple é uma sequência de objetos, indexada e imutável.

  3. c)

    Um list é uma coleção de objetos indexada e mutável.

  4. d)

    Um dict é uma coleção de objetos em que cada elementos está associado a uma chave.

Resposta.

a) coleção; b) tuple; c) mutável; d) chave

E. 2.7.2.

Crie um código que aloque os seguintes conjuntos

A={1,4,7} (2.56)
B={1,3,4,5,7,8} (2.57)

e verifique as seguintes afirmações:

  1. a)

    AB

  2. b)

    AB

  3. c)

    BA

  4. d)

    AB

Resposta.
1A = {1,4,7}
2B = {1,3,4,5,7,8}
3# a)
4a = A >= B
5print(f"a) A>=B: {a}")
6# b)
7b = A <= B
8print(f"b) A<=B: {b}")
9# c)
10c = not(B >= A)
11print(f"c) not(A>=B): {c}")
12# d)
13d = A < B
14print(f"d) A<B: {d}")
E. 2.7.3.

Crie um código que aloque os seguintes conjuntos

A={3,1,0,1,6,7} (2.58)
B={4,1,3,5,6,7} (2.59)
C={5,3,1,2,3,5} (2.60)

e, então, compute as seguintes operações:

  1. a)

    AB

  2. b)

    CB

  3. c)

    CA

  4. d)

    B(AC)

Resposta.
1A = {-3,-1,0,1,6,7}
2B = {-4,1,3,5,6,7}
3C = {-5,-3,1,2,3,5}
4# a)
5a = A & B
6print(f"a)\n A&B = {a}")
7# b)
8b = C | B
9print(f"b)\n A|B = {b}")
10# c)
11c = C - A
12print(f"c)\n C-A = {c}")
13# d)
14d = B & (A | C)
15print(f"d)\n B&(A|C) = {d}")
E. 2.7.4.

O produto cartesiano2727endnote: 27René Descartes, 1596 - 1650, matemático e filósofo francês. Fonte: Wikipédia: René Descartes. de um conjunto X com um conjunto Y é o seguinte conjunto de pares ordenados

X×Y:={(x,y):xXyY}. (2.61)

Crie um código que aloque os conjuntos

X={2,1,3}, (2.62)
Y={5,1,2} (2.63)

e X×Y. Por fim, forneça a quantidade de elementos de X×Y.

Resposta.
1X = {-2,1,3}
2Y = {5,-1,2}
3XxY = {(-2,5), (-2,-1), (-2,2), \
4       (1,5), (1,-1), (1,2), \
5       (3,5), (3,-1), (3,2)}
6print(f'#(X x Y) = {len(XxY)}')
E. 2.7.5.

A sequência de Fibonacci2828endnote: 28Leonardo Fibonacci, 1170 - 1250, matemático italiano. Fonte: Wikipédia: Leonardo Fibonacci. (fn)n𝒩 é definida por

fn:={0,n=0,1,n=1,fn2+fn1,n2 (2.64)

Crie um código que aloque os 6 primeiros elementos da sequência em uma list e imprima-o.

Resposta.
1a = [0,1]
2a.append(a[0]+a[1])
3a.append(a[1]+a[2])
4a.append(a[2]+a[3])
5a.append(a[3]+a[4])
6print(a)
E. 2.7.6.

Crie um código que usa de lists para alocar os seguintes vetores

𝒗=(1,0,2), (2.65)
𝒘=(3,1,2) (2.66)

e computar:

  1. a)

    𝒗+𝒘

  2. b)

    𝒗𝒘

  3. c)

    𝒗𝒘

  4. d)

    𝒗

  5. e)

    𝒗𝒘

Resposta.
1v = [-1, 0, 2]
2w = [3, 1, 2]
3# a)
4vpw = [v[0] + w[0],
5       v[1] + w[1],
6       v[2] + w[2]]
7print(f'a) v+w = {vpw}')
8# b)
9vmw = [v[0] - w[0],
10       v[1] - w[1],
11       v[2] - w[2]]
12print(f'b) v-w = {vmw}')
13# c)
14vdw = v[0]*w[0] + \
15      v[1]*w[1] + \
16      v[2]*w[2]
17print(f'c) v.w = {vdw}')
18# d)
19norm_v = (v[0]**2 + \
20         v[1]**2 + \
21         v[2]**2)**0.5
22print(f'd) ||v|| = {norm_v:.2f}')
23# e)
24norm_vmw = (vmw[0]**2 + \
25         vmw[1]**2 + \
26         vmw[2]**2)**0.5
27print(f'e) ||v-w|| = {norm_vmw:.2f}')
E. 2.7.7.

Crie um código que usa de listas encadeadas para alocar a matriz

A=[1123] (2.67)

e imprima o determinante de A, i.e.

|A|:=a1,1a2,2a1,2a2,1. (2.68)
Resposta.
1A = [[1, -1],
2     [2, 3]]
3detA = A[0][0]*A[1][1] \
4     - A[0][1]*A[1][0]
5print(f'|A| = {detA}')
E. 2.7.8.

Crie um código que use de listas para alocar a matriz

A=[112203312] (2.69)

e o vetor

𝒙=(1,2,1). (2.70)

Na sequência, compute A𝒙 e imprime o resultado.

Resposta.
1A = [[1, -1, 2],
2     [2, 0, -3],
3     [3, 1, -2]]
4x = [-1, 2, 1]
5Ax = [A[0][0]*x[0] + A[0][1]*x[1] + A[0][2]*x[2],
6      A[1][0]*x[0] + A[1][1]*x[1] + A[1][2]*x[2],
7      A[2][0]*x[0] + A[2][1]*x[1] + A[2][2]*x[2]]
8print(f'Ax = {Ax}')

Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Algoritmos e Programação I

2 Linguagem de programação

Compre o e-book deste material aqui! Consulte outras formas de colaborar.

2.7 Coleção de dados

Objetos da classe de dados int e float permitem a alocação de um valor numérico por variável. Já, string é um coleção (sequência) de caracteres. Nesta seção, vamos estudar sobre classes de dados básicos que permitem a alocação de uma coleção de dados em uma única variável.

2.7.1 set

Em Python, set é uma classe de dados para a alocação de um conjunto de objetos. Assim como na matemática, um set é uma coleção de itens não indexada, imutável e não admite itens duplicados.

A alocação de um set pode ser feita como no seguinte exemplo:

1a = {-3.7, 1, 'amarelo'}
2print('a =', a)
3print('type =', type(a))
a = {1, -3.7, 'amarelo'}
type = <class 'set'>

Observamos que a ordem dos elementos é arbitrária, uma vez que set é uma coleção de itens não indexada.

O método set() também pode ser usado para criar um conjunto. Por exemplo, o conjunto vazio pode ser criado como segue:

1b = set()
2print('b =', b)
3print('type =', type(b))
b = set()
type = <class 'set'>

O método len pode ser usado para obtermos o tamanho (número de elementos) de um set:

1print('#a =', len(a))
2print('#b =', len(b))
#a = 3
#b = 0

Operadores de comparação

Os seguintes operadores de comparação estão disponíveis para sets:

  • x in a pertencimento

    Verifica se xa.

    1a = {1, -3.7, 'amarelo'}
    2print('1 in a =', 1 in a)
    3print('"mar" in a =', 'mar' in a)
    1 in a = True
    "mar" in a = False
  • a == b igualdade

    Verifica se a=b.

    1a == a
    True
  • a != b diferente

    Verifica se ab.

    1b = {'amarelo', -3.7}
    2a != b
    True
  • a <= b contido em ou igual a (subconjunto)

    Verifica se ab.

    1b <= a
    True
  • < contido em e não igual a (subconjunto próprio)

    Verifica se ab.

    1print('a < a =', a < a)
    2print('b < a =', b < a)
    a < a = False
    b < a = True
  • >= contém ou é igual a (subconjunto)

    Verifica se ab.

    1a >= b
    True
  • > contém e não é igual a (subconjunto próprio)

    Verifica se ab.

    1print('a > b =', a > b)
    2print('b > b =', b > b)
    a > b = True
    b > b = False

Operações com conjuntos

Em Python, as seguintes operações com conjuntos estão disponíveis:

  • a | b união

    Retorna o set equivalente a

    ab:={x:xaxb} (2.44)
    1a = {1, -3.7, 'amarelo'}
    2b = {'mar', -5}
    3a | b
    {1, 'amarelo', 'mar', -5, -3.7}
  • a & b interseção

    Retorna o set equivalente a

    ab:={x:xaxb} (2.45)
    1a = {1, -3.7, 'amarelo'}
    2b = {'mar', 1, -3.7, -5}
    3a & b
    {1, -3.7}
  • - diferença

    Retorna o set equivalente a

    ab:={x:xaxb} (2.46)
    1a - b
    {'amarelo'}
  • ^ diferença simétrica

    Retorna o set equivalente a

    aΔb:=(ab)(ba) (2.47)
    1a ^ b
    {'amarelo', 'mar', -5}

2.7.2 tuple

Em Python, tuple é uma sequência de objetos, indexada e imutável. São similares as n-uplas2626endnote: 26Pares (duplas), triplas, quadruplas ordenadas, etc. em matemática. A alocação é feita com uso de parênteses e os elementos separados por vírgula, por exemplo,

1a = (1, -3.7, 'amarelo', -5)
2type(a)
<class 'tuple'>

Indexação e fatiamento

O tamanho de um tuple é sua quantidade de objetos e pode ser obtido com o método len(), por exemplo,

1a = (1, -3.7, 'amarelo', -5, {-3,1})
2len(a)
5

Os itens são indexados como segue

(105,3.714,’amarelo’23,532,{3,1}41) (2.48)

A referência a um objeto do tuple pode ser feita com

1a[2]
'amarelo'
1a[-1]
{1, -3}

Analogamente a strings, pode-se fazer o fatiamento de tuples usando-se o operador :. Por exemplo,

1a[:2]
(1, -3.7)
1a[1:5:2]
(-3.7, -5)
1a[::-1]
({1, -3}, -5, 'amarelo', -3.7, 1)

Operações com tuples

Os mesmos operadores de comparação para sets estão disponíveis para tuples (consulte a Subseção 2.7.1). Por exemplo,

1-5 in a
True
1a[::-1] == a[-1:-6:-1]
True
1a != a[::-1]
True
1a[:2] < a
True
Observação 2.7.1 (Igualdade entre tuples).

Dois tuples são iguais quando contém os mesmos elementos e na mesma ordem.

Há, também, operadores para a concatenação e repetição:

  • + concatenação

    1a = (1,2)
    2b = (3,4,5)
    3a+b
    (1, 2, 3, 4, 5)
  • * : repetição

    1a*3
    (1, 2, 1, 2, 1, 2)
Observação 2.7.2 (Permutação de variáveis).

Dizemos que um código é pythônico quando explora a linguagem para escrevê-lo de forma sucinta e de fácil compreensão. Por exemplo, a permutação de variáveis é classicamente feita como segue

1x = 1
2y = 2
3# buffer
4z = x
5x = y
6y = z
7x, y
(2, 1)

Note que na última linha, um tuple foi criado. Ou seja, a criação de tuples não requer o uso de parênteses, basta colocar os objetos separados por vírgulas. Podemos explorar isso e escrevermos o seguinte código pythônico para a permutação de variáveis:

1x, y = y, x
2print('x =', x)
3print('y =', y)
x = 1
y = 2

2.7.3 list

Em Python, list é uma classe de objetos do tipo lista, é uma coleção de objetos indexada e mutável. Para a criação de uma lista, usamos colchetes:

1a = [1, -3.7, 'amarelo', -5, (-3,1)]
2type(a)
list
1print('a[2] =', a[2])
2print('a[1::2] =', a[1::2])
a[2] = amarelo
a[1::2] = [-3.7, -5]
Exemplo 2.7.1 (Vetores alocados como lists).

Sejam dados dois vetores

v=(v1.v2,v3), (2.49)
w=(w1,w2,w3). (2.50)

O produto interno vw é calculado por

vw:=v1w1+v2w2+v3w3. (2.51)

O seguinte código, aloca os vetores

v=(1,2,1), (2.52)
w=(3,1,4) (2.53)

usando lists, computa o produto interno vw e imprime o resultado.

1v = [-1, 2, 1]
2w = [3, -1, 4]
3p = v[0]*w[0] \
4    + v[1]*w[1] \
5    + v[2]*w[2]
6print(f'v.w = {p}')
Exemplo 2.7.2 (Matrizes e listas encadeadas).

Consideramos a matriz

A=[1113] (2.54)

Podemos alocá-la por linhas pelo encadeamento de lists, i.e.

1A = [[-1,1],[1,3]]
2A
[[-1, 1], [1, 3]]

Com isso, podemos obter a segunda linha da matriz com

1A[1]
[1, 3]

Ou ainda, podemos obter o elemento da segunda linha e primeira coluna com

1A[1][0]
1
Observação 2.7.3 (Operadores).

Os operadores envolvendo tuple são análogos para lists. Por exemplo,

1a = [1,2]
2b = [3,4]
3print('a + b =', a + b)
4print('2*a =', 2*a)
5print('a <= a =', a <= a)
a + b = [1, 2, 3, 4]
2*a = [1, 2, 1, 2]
a <= a = True

Modificações em lists

list é uma classe de objetos mutável, i.e. permite que a coleção de objetos que a constituem seja alterada. Pode-se fazer a alteração de itens usando-se suas posições, por exemplo

1a = [1, -3.7, 'amarelo', -5, (-3,1)]
2a[1] = 7.5
3print('a =', a)
a = [1, 7.5, 'amarelo', -5, (-3, 1)]
1a[1:3] = ['mar', -2.47]
2print('a =', a)
a = [1, 'mar', -2.47, -5, (-3, 1)]

Tem-se disponíveis os seguintes métodos para a modificação de lists:

  • del deleta elemento(s)

    1del a[:2]
    2print('a =', a)
    a = [-2.47, -5, (-3, 1)]
  • list.insert inserção de elemento(s)

    1a.insert(1, 'azul')
    2a
    [-2.47, 'azul', -5, (-3, 1)]
  • list.append anexa um novo elemento

    1a.append([2,1])
    2a
    [-2.47, 'azul', -5, (-3, 1), [2, 1]]
  • list.extend estende com novos elementos dados

    1del a[-1]
    2a.extend([2,1])
    3a
    [-2.47, 'azul', -5, (-3, 1), 2, 1]
    1a += [3]
    2a
    [-2.47, 'azul', -5, (-3, 1), 2, 1, 3]
Observação 2.7.4 (Cópia de objetos).

Em Python, dados têm um único identificador, por isso temos

1a = [1,2,3]
2b = a
3b[1] = 4
4a
[1, 4, 3]

Para fazermos uma cópia de uma list, podemos usar o método list.copy. Com isso, temos

1a = [1,2,3]
2b = a.copy()
3b[1] = 4
4print('a =', a)
5print('b =', b)
a = [1, 2, 3]
b = [1, 4, 3]

2.7.4 dict

Em Python, um dicionário dict é uma coleção de objetos em que cada elemento está associado a uma chave. Como chave podemos usar qualquer dado imutável (int, float, str, etc.). Criamos um dict ao alocarmos um conjunto de chaves:valores:

1x = {'nome': 'Fulane', 'idade': 19}
2x
{'nome': 'Fulane', 'idade': 19}
1y = {3: 'número inteiro', 3.14: 'pi', 2.71: 2}
2y
{3: 'número inteiro', 3.14: 'pi', 2.71: 2}

Observamos que {} cria um dicionário vazio, por exemplo

1d = {}
2type(d)
<class 'dict'>

Acessamos um valor no dict referenciando-se sua chave, por exemplo

1x['idade']
19
1y[3]
'número inteiro'

Podemos obter a lista de chaves de um dict da seguinte forma

1list(x)
['nome', 'idade']
1list(y)
[3, 3.14, 2.71]
Exemplo 2.7.3.

Consideramos o triângulo de vértices {(0,0), (1,0), (0,1)}. Alocamos um dicionário contendo os vértices do triangulo

1tria = {'A': (0,0), 'B': (1,0), 'C': (0,1)}
2tria
{'A': (0, 0), 'B': (1, 0), 'C': (0, 1)}

Para recuperarmos o valor do segundo vértice, por exemplo, digitamos

1tria['B']
(1, 0)

Em um dict, valores podem ser modificados, por exemplo,

1x['nome'] = 'Fulana'
2x
{'nome': 'Fulana', 'idade': 19}

A inserção de uma nova associação chave:valor estende um dict, por exemplo

1x['altura'] = 171
2x
{'nome': 'Fulana', 'idade': 19, 'altura': 171}
Exemplo 2.7.4.

No Exemplo 2.7.3, alocamos o dicionário tria contendo os vértices de um dado triângulo. Agora, vamos computar o comprimento de cada uma de suas arestas e alocar o resultado no próprio dict. A distância entre dois pontos A=(a1,a2) e B=(b1,b2) pode ser calculada por

d(A,b):=(b1a1)2+(a2b2)2 (2.55)

Segue nosso código:

1# vértices do triangulo
2tria = {'A': (0,0), 'B': (1,0), 'C': (0,1)}
3# aresta AB
4tria['AB'] = ((tria['B'][0] - tria['A'][0])**2 \
5    + (tria['B'][1] - tria['A'][1])**2)**0.5
6# aresta BC
7tria['BC'] = ((tria['C'][0] - tria['B'][0])**2 \
8    + (tria['C'][1] - tria['B'][1])**2)**0.5
9# aresta AC
10tria['AC'] = ((tria['C'][0] - tria['A'][0])**2 \
11    + (tria['C'][1] - tria['A'][1])**2)**0.5
12# novo dicionário
13print(tria)

Verifique!

2.7.5 Exercícios

E. 2.7.1.

Complete as lacunas.

  1. a)

    Um set é uma coleção de dados não indexada, imutável e não admite itens duplicados.

  2. b)

    Um tuple é uma sequência de objetos, indexada e imutável.

  3. c)

    Um list é uma coleção de objetos indexada e mutável.

  4. d)

    Um dict é uma coleção de objetos em que cada elementos está associado a uma chave.

Resposta.

a) coleção; b) tuple; c) mutável; d) chave

E. 2.7.2.

Crie um código que aloque os seguintes conjuntos

A={1,4,7} (2.56)
B={1,3,4,5,7,8} (2.57)

e verifique as seguintes afirmações:

  1. a)

    AB

  2. b)

    AB

  3. c)

    BA

  4. d)

    AB

Resposta.
1A = {1,4,7}
2B = {1,3,4,5,7,8}
3# a)
4a = A >= B
5print(f"a) A>=B: {a}")
6# b)
7b = A <= B
8print(f"b) A<=B: {b}")
9# c)
10c = not(B >= A)
11print(f"c) not(A>=B): {c}")
12# d)
13d = A < B
14print(f"d) A<B: {d}")
E. 2.7.3.

Crie um código que aloque os seguintes conjuntos

A={3,1,0,1,6,7} (2.58)
B={4,1,3,5,6,7} (2.59)
C={5,3,1,2,3,5} (2.60)

e, então, compute as seguintes operações:

  1. a)

    AB

  2. b)

    CB

  3. c)

    CA

  4. d)

    B(AC)

Resposta.
1A = {-3,-1,0,1,6,7}
2B = {-4,1,3,5,6,7}
3C = {-5,-3,1,2,3,5}
4# a)
5a = A & B
6print(f"a)\n A&B = {a}")
7# b)
8b = C | B
9print(f"b)\n A|B = {b}")
10# c)
11c = C - A
12print(f"c)\n C-A = {c}")
13# d)
14d = B & (A | C)
15print(f"d)\n B&(A|C) = {d}")
E. 2.7.4.

O produto cartesiano2727endnote: 27René Descartes, 1596 - 1650, matemático e filósofo francês. Fonte: Wikipédia: René Descartes. de um conjunto X com um conjunto Y é o seguinte conjunto de pares ordenados

X×Y:={(x,y):xXyY}. (2.61)

Crie um código que aloque os conjuntos

X={2,1,3}, (2.62)
Y={5,1,2} (2.63)

e X×Y. Por fim, forneça a quantidade de elementos de X×Y.

Resposta.
1X = {-2,1,3}
2Y = {5,-1,2}
3XxY = {(-2,5), (-2,-1), (-2,2), \
4       (1,5), (1,-1), (1,2), \
5       (3,5), (3,-1), (3,2)}
6print(f'#(X x Y) = {len(XxY)}')
E. 2.7.5.

A sequência de Fibonacci2828endnote: 28Leonardo Fibonacci, 1170 - 1250, matemático italiano. Fonte: Wikipédia: Leonardo Fibonacci. (fn)n𝒩 é definida por

fn:={0,n=0,1,n=1,fn2+fn1,n2 (2.64)

Crie um código que aloque os 6 primeiros elementos da sequência em uma list e imprima-o.

Resposta.
1a = [0,1]
2a.append(a[0]+a[1])
3a.append(a[1]+a[2])
4a.append(a[2]+a[3])
5a.append(a[3]+a[4])
6print(a)
E. 2.7.6.

Crie um código que usa de lists para alocar os seguintes vetores

𝒗=(1,0,2), (2.65)
𝒘=(3,1,2) (2.66)

e computar:

  1. a)

    𝒗+𝒘

  2. b)

    𝒗𝒘

  3. c)

    𝒗𝒘

  4. d)

    𝒗

  5. e)

    𝒗𝒘

Resposta.
1v = [-1, 0, 2]
2w = [3, 1, 2]
3# a)
4vpw = [v[0] + w[0],
5       v[1] + w[1],
6       v[2] + w[2]]
7print(f'a) v+w = {vpw}')
8# b)
9vmw = [v[0] - w[0],
10       v[1] - w[1],
11       v[2] - w[2]]
12print(f'b) v-w = {vmw}')
13# c)
14vdw = v[0]*w[0] + \
15      v[1]*w[1] + \
16      v[2]*w[2]
17print(f'c) v.w = {vdw}')
18# d)
19norm_v = (v[0]**2 + \
20         v[1]**2 + \
21         v[2]**2)**0.5
22print(f'd) ||v|| = {norm_v:.2f}')
23# e)
24norm_vmw = (vmw[0]**2 + \
25         vmw[1]**2 + \
26         vmw[2]**2)**0.5
27print(f'e) ||v-w|| = {norm_vmw:.2f}')
E. 2.7.7.

Crie um código que usa de listas encadeadas para alocar a matriz

A=[1123] (2.67)

e imprima o determinante de A, i.e.

|A|:=a1,1a2,2a1,2a2,1. (2.68)
Resposta.
1A = [[1, -1],
2     [2, 3]]
3detA = A[0][0]*A[1][1] \
4     - A[0][1]*A[1][0]
5print(f'|A| = {detA}')
E. 2.7.8.

Crie um código que use de listas para alocar a matriz

A=[112203312] (2.69)

e o vetor

𝒙=(1,2,1). (2.70)

Na sequência, compute A𝒙 e imprime o resultado.

Resposta.
1A = [[1, -1, 2],
2     [2, 0, -3],
3     [3, 1, -2]]
4x = [-1, 2, 1]
5Ax = [A[0][0]*x[0] + A[0][1]*x[1] + A[0][2]*x[2],
6      A[1][0]*x[0] + A[1][1]*x[1] + A[1][2]*x[2],
7      A[2][0]*x[0] + A[2][1]*x[1] + A[2][2]*x[2]]
8print(f'Ax = {Ax}')

Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |