Em Python, uma tupla é uma coleção imutável de itens em sequência.
Como a maioria das coleções, tuples podem conter qualquer tipo de dado (ou vários tipos), incluindo outras tuples.
As tuplas dão suporte a todas as operações comuns de sequência, mas não dão suporte a operações de sequência mutáveis.
Os elementos de uma tupla podem ser iterados usando a construção for item in <tuple>.
Se você precisar tanto do índice quanto do valor do elemento, pode usar for index, item in enumerate(<tuple>).
Como em qualquer sequência, os elementos dentro de tuples podem ser acessados com a notação de colchetes, usando um número 0-based index a partir da esquerda ou um número -1-based index a partir da direita.
As tuplas também podem ser copiadas por inteiro ou em parte usando a notação de fatiamento (<tuple>[<start>:<stop>:<step>]).
As tuplas podem ser formadas de várias maneiras, usando o construtor de classe tuple(<iterable>) ou a declaração literal tuple.
tuple() vazio ou com um iterável:>>> no_elements = tuple()
()
# The constructor *requires* an iterable, so single elements must be passed in a list or another tuple.
>>> one_element = tuple([16])
(16,)
Strings são iteráveis, então usar uma única str como argumento do construtor tuple() pode ter resultados surpreendentes:
# String elements (characters) are iterated through and added to the tuple
>>> multiple_elements_string = tuple("Timbuktu")
('T', 'i', 'm', 'b', 'u', 'k', 't', 'u')
Iteráveis simples têm seus elementos adicionados um a um:
>>> multiple_elements_list = tuple(["Parrot", "Bird", 334782])
("Parrot", "Bird", 334782)
>>> multiple_elements_set = tuple({2, 3, 5, 7, 11})
(2,3,5,7,11)
Como o construtor tuple(<iterable>) só aceita iteráveis (ou nada) como argumentos, é muito mais fácil criar uma tupla de um único elemento pelo método literal.
>>> no_elements = ()
()
>>> one_element = ("Guava",)
("Guava",)
Estruturas de dados aninhadas podem ser incluídas como elementos de tuple, incluindo outras tuples:
>>> nested_data_structures = ({"fish": "gold", "monkey": "brown", "parrot" : "grey"}, ("fish", "mammal", "bird"))
({"fish": "gold", "monkey": "brown", "parrot" : "grey"}, ("fish", "mammal", "bird"))
>>> nested_data_structures_1 = (["fish", "gold", "monkey", "brown", "parrot", "grey"], ("fish", "mammal", "bird"))
(["fish", "gold", "monkey", "brown", "parrot", "grey"], ("fish", "mammal", "bird"))
As tuplas podem ser concatenadas com o operador de soma +, que desempacota cada tuple e cria uma nova tuple combinada.
>>> new_via_concatenate = ("George", 5) + ("cat", "Tabby")
("George", 5, "cat", "Tabby")
#likewise, using the multiplication operator * is the equivalent of using + n times
>>> first_group = ("cat", "dog", "elephant")
>>> multiplied_group = first_group * 3
('cat', 'dog', 'elephant', 'cat', 'dog', 'elephant', 'cat', 'dog', 'elephant')
Os elementos dentro de uma tuple podem ser acessados com a notação de colchetes, usando um número 0-based index a partir da esquerda ou um número -1-based index a partir da direita.
student_info = ("Alyssa", "grade 3", "female", 8 )
#gender is at index 2 or index -2
>>> student_gender = student_info[2]
'female'
>>> student_gender = student_info[-2]
'female'
#name is at index 0 or index -4
>>> student_name = student_info[0]
Alyssa
>>> student_name = student_info[-4]
Alyssa
Os elementos dentro de uma tuple podem ser iterados em um laço usando a sintaxe for item in <tuple>.
Se você precisar tanto dos índices quanto dos valores, pode usar for index, item in enumerate(<tuple>).
>>> student_info = ("Alyssa", "grade 3", "female", 8 )
>>> for item in student_info:
... print(item)
...
Alyssa
grade 3
female
8
>>> for index, item in enumerate(student_info):
... print("Index is: " + str(index) + ", value is: " + str(item) +".")
...
Index is: 0, value is: Alyssa.
Index is: 1, value is: grade 3.
Index is: 2, value is: female.
Index is: 3, value is: 8.
O operador in pode ser usado para verificar se algo pertence a uma tuple.
>>> multiple_elements_list = tuple(["Parrot", "Bird", 334782])
("Parrot", "Bird", 334782)
>>> "Parrot" in multiple_elements_list
True
Azara e Rui são colegas de equipe competindo em uma caça ao tesouro com tema de piratas. Um tem uma lista de tesouros com coordenadas de mapa, o outro uma lista de nomes de locais com coordenadas de mapa. Eles também receberam mapas em branco com um ponto de partida marcado como VOCÊ ESTÁ AQUI.
| Lista da Azara | Lista do Rui | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Mas as coisas estão um pouco desorganizadas: as coordenadas da Azara parecem estar formatadas e ordenadas de forma diferente das do Rui, e eles precisam ficar olhando de uma lista para a outra para descobrir quais tesouros combinam com quais locais. Como aspirantes a pythonistas, eles procuraram você para ajudar a escrever um pequeno programa (um conjunto de funções, na verdade) para organizar melhor as informações da caçada.
Implemente a função get_coordinate() que recebe um par (treasure, coordinate) da lista da Azara e retorna apenas a coordenada de mapa extraída.
>>> get_coordinate(('Scrimshawed Whale Tooth', '2A'))
2A
Implemente a função convert_coordinate() que recebe uma coordenada no formato "2A" e retorna uma tupla no formato ("2", "A").
>>> convert_coordinate("2A")
("2", "A")
Implemente a função compare_records() que recebe um par (treasure, coordinate) e um registro (location, coordinate, quadrant) e compara as coordenadas de cada um.
Retorne True se as coordenadas "combinarem", e retorne False se não combinarem.
Reformate as coordenadas conforme necessário para uma comparação precisa.
>>> compare_records(('Brass Spyglass', '4B'), ('Seaside Cottages', ('1', 'C'), 'blue'))
False
>>> compare_records(('Model Ship in Large Bottle', '8A'), ('Harbor Managers Office', ('8', 'A'), 'purple'))
True
Implemente a função create_record() que recebe um par (treasure, coordinate) da lista da Azara e um registro (location, coordinate, quadrant) da lista do Rui e retorna (treasure, coordinate, location, coordinate, quadrant) se as coordenadas combinarem.
Se as coordenadas não combinarem, retorne a string "not a match".
Reformate a coordenada conforme necessário para uma comparação precisa.
>>> create_record(('Brass Spyglass', '4B'), ('Abandoned Lighthouse', ('4', 'B'), 'Blue'))
('Brass Spyglass', '4B', 'Abandoned Lighthouse', ('4', 'B'), 'Blue')
>>> create_record(('Brass Spyglass', '4B'), ('Seaside Cottages', ('1', 'C'), 'blue'))
"not a match"
Faça uma limpeza nos registros combinados da Azara e do Rui para que haja apenas um conjunto de coordenadas por registro. Crie um relatório para que eles possam ver uma única lista de tudo o que precisam colocar em seus mapas.
Implemente a função clean_up() que recebe uma tupla de tuplas (tudo das duas listas), percorre a tupla externa, descarta as coordenadas indesejadas de cada tupla interna e adiciona cada uma a um 'relatório'.
Formate e retorne o 'relatório' de modo que haja um registro limpo em cada linha.
>>> clean_up((('Brass Spyglass', '4B', 'Abandoned Lighthouse', ('4', 'B'), 'Blue'), ('Vintage Pirate Hat', '7E', 'Quiet Inlet (Island of Mystery)', ('7', 'E'), 'Orange'), ('Crystal Crab', '6A', 'Old Schooner', ('6', 'A'), 'Purple')))
"""
('Brass Spyglass', 'Abandoned Lighthouse', ('4', 'B'), 'Blue')\n
('Vintage Pirate Hat', 'Quiet Inlet (Island of Mystery)', ('7', 'E'), 'Orange')\n
('Crystal Crab', 'Old Schooner', ('6', 'A'), 'Purple')\n
"""
Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.