Tupla
Definição
Uma tupla é uma coleção ordenada (a posição dos itens não muda) e imutável. Permite membros duplicados.
- Uma tupla sem itens repetidos. Note que a tupla abaixo tem uma string, um número real, um inteiro e uma lista.
x = ("teste", 12.3, 1, [1,2,3])
- Uma tupla com itens repetidos.
x = ("teste", 12.3, "teste")
- Uma tupla vazia.
x = ()
- Para criar uma tupla com apenas um elemento, é preciso adicionar uma vírgula após o único elemento. No exemplo abaixo, x é uma tupla, enquanto y é uma string.
x = ("teste",)
y = ("teste")
- É possível atribuir os elementos de uma tupla para variáveis distintas de forma automática. No exemplo abaixo, temos uma tupla com 4 elementos. Cada elemento é assinalado para uma variável diferente.
x = ("teste", 12.3, 1, [1,2,3]) (a, b, c, d) = x print("a = ", a, ",", type(a)) print("b = ", b, ",", type(b)) print("c = ", c, ",", type(c)) print("d = ", d, ",", type(d))
Note, na resposta abaixo, que as variáveis criadas são de diferentes tipos.
a = teste , <class 'str'> b = 12.3 , <class 'float'> c = 1 , <class 'int'> d = [1, 2, 3] , <class 'list'>
Índices
Pode-se acessar os itens de uma tupla usando índices que começam com o valor zero. No exemplo abaixo, a tupla x tem 4 elementos: um número inteiro, uma string, uma lista e um número real.
x = (1, 'abc', [4,5,6], 2.3)
print('x = ', x, ', type(x) = ', type(x))
print('x[0] =', x[0], ', type(x[0]) = ', type(x[0]))
print('x[1] =', x[1], ', type(x[1]) = ', type(x[1]))
print('x[2] =', x[2], ', type(x[2]) = ', type(x[2]))
print('x[3] =', x[3], ', type(x[3]) = ', type(x[3]))
O programa apresenta a saída abaixo. Para acessar os elementos da lista que estão dentro da tupla, basta incluir mais um índice. Neste caso, temos x[2][0] = 4, x[2][1] = 5 e x[2][2] = 6.
x = (1, 'abc', [4, 5, 6], 2.3) , type(x) = <class 'tuple'>
x[0] = 1 , type(x[0]) = <class 'int'>
x[1] = abc , type(x[1]) = <class 'str'>
x[2] = [4, 5, 6] , type(x[2]) = <class 'list'>
x[3] = 2.3 , type(x[3]) = <class 'float'>
É também possível usar índices negativos. Neste caso, os índices são numerados a partir de -1 indo do item mais à direita para o item mais à esquerda da tupla. Para o exemplo acima temos x[-1] = 2.3, x[-2] = [4, 5, 6], x[-3] = ‘abc’ e x[-4] = 1.
Pode-se usar slice (fatia) para selecionar vários itens de uma tupla. Um slice usa o formato definido a seguir.
início : fim : incremento
Considerando a tupla x do exemplo acima, os comandos
print(x[0:2]) print(x[1:3]) print(x[-3:-1])
fornecem a seguinte resposta:
(1, 'abc') ('abc', [4, 5, 6]) ('abc', [4, 5, 6])
Note que slice inclui o elemento com o índice indicado pelo início do slice, mas não mostra o elemento com o índice indicado pelo fim.
Métodos
- O método count() retorna o número de vezes que um determinado valor aparece em um tupla. O programa
x = ('abc', 4, 'teste', 4, 'abc', 4) print('Existem', x.count(4), 'valores 4') print('Existem', x.count('abc'), 'valores "abc"')
tem como resposta:
Existem 3 valores 4 Existem 2 valores "abc"
- Para saber o índice da tupla onde se encontra determinado valor, pode-se usar o método index(). Este método retorna apenas o índice do primeiro valor encontrado.
x = ('abc', 4, 'teste', 4, 'abc', 4) print('Primeiro índice para o valor 4: ', x.index(4)) print('Primeiro índice para o valor "abc": ', x.index('abc'))
A resposta é
Primeiro índice para o valor 4: 1 Primeiro índice para o valor "abc": 0
Para ver todos os índices que tem valor 4, use
i = 0 for k in x: if (k == 4): print(i) i +=1
Neste caso, o programa responderá que os índices são: 1, 3 e 5.
- O método tuple() pode ser usado para converter algum tipo de dado para uma tupla. Por exemplo,
x = '15' y = ['a',2, 'teste'] z = 'abc' print("x = ", x, ",", type(x), "id = ", id(x)) print("y = ", y, ",", type(y), "id = ", id(y)) print("z = ", z, ",", type(z), "id = ", id(z)) print("*****************") x = tuple(x) y = tuple(y) z = tuple(z) print("x = ", x, ",", type(x), "id = ", id(x)) print("y = ", y, ",", type(y), "id = ", id(y)) print("z = ", z, ",", type(z), "id = ", id(z))
mostra a seguinte resposta:
x = 15 , <class 'str'> id = 140308135207984 y = ['a', 2, 'teste'] , <class 'list'> id = 140308135145664 z = abc , <class 'str'> id = 140308136444848 ***************** x = ('1', '5') , <class 'tuple'> id = 140308136261312 y = ('a', 2, 'teste') , <class 'tuple'> id = 140308135128320 z = ('a', 'b', 'c') , <class 'tuple'> id = 140308135344448
Podemos fazer algumas observações para este exemplo: a) ao usar o método tuple(), foram criadas estruturas com o mesmo nome das estruturas que existiam e as estruturas anteriores foram deletadas (possuem id diferentes); b) o método tuple() considera cada caractere da string como um elemento da tupla; c) o método não aceita converter números em tuplas, dá erro (por isso, a variável x tem a string ’15’ e não o número inteiro 15).
É possível o usar o método tuple() para criar uma tupla. Neste caso, deve-se usar dois parênteses como mostrado abaixo.
x = tuple(('a', 2, 'teste')) print("x = ", x, ",", type(x))
O programa apresenta a seguinte reposta:
x = ('a', 2, 'teste') , <class 'tuple'>
- O método sum() soma os elementos de um tupla que só tem valores numéricos.
x = (12.56, 5, 0.375) print("sum = ", sum(x))
O resultado do programa acima é 17.935.
- O método sorted() permite ordenar os elementos de uma tupla que são do mesmo tipo (números ou strings). Por exemplo, considere 2 tuplas: a primeira tem apenas números e a segunda tem apenas strings.
x = (12, 1.2, 25, 101, 14) print("x ordenado = ", sorted(x)) y = ('bc', 'a', 'fg') print("y ordenado = ", sorted(y))
O resultado do programa é
x ordenado = [1.2, 12, 14, 25, 101] y ordenado = ['a', 'bc', 'fg']
Operações
É possível criar novas tuplas usando as operações de adição e multiplicação. O programa
x = (1, 'a', [4,5,6]) y = ('a', 'b', 'c') print('x + y = ', x + y) print('x * 2 + y = ', x * 2 + y)
tem como resposta
x + y = (1, 'a', [4, 5, 6], 'a', 'b', 'c') x * 2 + y = (1, 'a', [4, 5, 6], 1, 'a', [4, 5, 6], 'a', 'b', 'c')