| | | | |

2.7 Coleção de Dados

Compre o e-book deste material aqui!

Objetos da classe de dados inte floatpermitem 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 Conjuntos 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:

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

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:

1>>> b = set()
2>>> type(b)
3<class 'set'>
4>>> b
5set()

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

1>>> len(a)
23
3>>> len(b)
40

Operadores de Comparação

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

  • x in a pertencimento

    Verifica se xa.

    1>>> a = {1, -3.7, 'amarelo'}
    2>>> 1 in a
    3True
    4>>> 'mar' in a
    5False
  • a == b igualdade

    Verifica se a=b.

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

    Verifica se ab.

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

    Verifica se ab.

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

    Verifica se ab.

    1>>> a < a
    2False
    3>>> b < a
    4True
  • >= contém ou é igual a (subconjunto)

    Verifica se ab.

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

    Verifica se ab.

    1>>> a > b
    2True
    3>>> b > b
    4False

Operações com Conjuntos

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

  • a | b união

    Retorna o setequivalente a

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

    Retorna o setequivalente a

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

    Retorna o setequivalente a

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

    Retorna o setequivalente a

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

2.7.2 N-uplas 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,

1>>> a = (1, -3.7, 'amarelo', -5)
2>>> type(a)
3<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,

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

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

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

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

1>>> a[:2]
2(1, -3.7)
3>>> a[1:5:2]
4(-3.7, -5)
5>>> a[::-1]
6({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
2True
3>>> a[::-1] == a[-1:-6:-1]
4True
5>>> a != a[::-1]
6True
7>>> a[:2] < a
8True
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

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

    1>>> a*3
    2(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

1>>> x = 1
2>>> y = 2
3>>> z = x
4>>> x = y
5>>> y = z
6>>> x, y
7(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:

1>>> x, y = y, x
2>>> x, y
3(1, 2)

2.7.3 Listas 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:

1>>> a = [1, -3.7, 'amarelo', -5, (-3,1)]
2>>> type(a)
3<class 'list'>
4>>> a[2]
5'amarelo'
6>>> a[1::2]
7[-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.

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

Com isso, podemos obter a segunda linha da matriz com

1>>> A[1]
2[1, 3]

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

1>>> A[1][0]
21
Observação 2.7.3.

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

1>>> a = [1,2]
2>>> b = [3,4]
3>>> a + b
4[1, 2, 3, 4]
5>>> 2*a
6[1, 2, 1, 2]
7>>> a <= a
8True

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

1>>> a = [1, -3.7, 'amarelo', -5, (-3,1)]
2>>> a[1] = 7.5
3>>> a
4[1, 7.5, 'amarelo', -5, (-3, 1)]
5>>> a[1:3] = ['mar', -2.47]
6>>> a
7[1, 'mar', -2.47, -5, (-3, 1)]
8>>> a[:2] = 7

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

  • del deleta elemento(s)

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

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

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

    1>>> del a[-1]
    2>>> a.extend([2,1])
    3>>> a
    4[-2.47, 'azul', -5, (-3, 1), 2, 1]
    5>>> a += [3]
    6>>> a
    7[-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

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

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

1>>> a = [1,2,3]
2>>> b = a.copy()
3>>> b[1] = 4
4>>> a
5[1, 2, 3]
6>>> b
7[1, 4, 3]

2.7.4 Dicionários 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:

1>>> x = {'nome': 'Fulane', 'idade': 19}
2>>> x
3{'nome': 'Fulane', 'idade': 19}
4>>> y = {3: 'número inteiro', 3.14: 'pi', 2.71: 2}
5>>> y
6{3: 'número inteiro', 3.14: 'pi', 2.71: 2}
7>>> d = {}
8>>> type(d)
9<class 'dict'>

Observamos que {} cria um dicionário vazio. Acessamos um valor no dict referenciando-se sua chave, por exemplo

1>>> x['idade']
219
3>>> y[3]
4'número inteiro'

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

1>>> list(x)
2['nome', 'idade']
3>>> list(y)
4[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

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

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

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

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

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

Podemos estender um dict pela inserção de uma nova associação chave:valor, por exemplo

1>>> x['altura'] = 171
2>>> x
3{'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)

2.7.5 Exercícios

E. 2.7.1.

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.2.

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.3.

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},Y={5,1,2} (2.62)

e X×Y. Por fim, fornece 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.4.

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.63)

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.5.

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

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

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.6.

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

A=[1123] (2.66)

e imprima o determinante de A, i.e.

|A|:=a1,1a2,2a1,2a2,1. (2.67)
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.7.

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

A=[112203312] (2.68)

e o vetor

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

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

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. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!