En Python, una tupla es una colección inmutable de elementos en secuencia.
Como la mayoría de las colecciones, tuples puede contener cualquier tipo de dato (o varios tipos), incluidos otros tuples.
Las tuplas admiten todas las operaciones comunes de secuencia, pero no admiten las operaciones de secuencia mutables.
Los elementos de una tupla se pueden recorrer con la construcción for item in <tuple>.
Si necesitas tanto el índice del elemento como su valor, puedes usar for index, item in enumerate(<tuple>).
Como en cualquier secuencia, se puede acceder a los elementos dentro de tuples mediante la notación de corchetes usando un 0-based index desde la izquierda o un -1-based index desde la derecha.
Las tuplas también se pueden copiar total o parcialmente usando la notación de rebanadas (<tuple>[<start>:<stop>:<step>]).
Las tuplas se pueden formar de varias maneras, usando el constructor de la clase tuple(<iterable>) o la declaración literal de tuple.
tuple() vacío o con un iterable:>>> 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,)
Los strings son iterables, así que usar un solo str como argumento del constructor tuple() puede dar resultados sorprendentes:
# String elements (characters) are iterated through and added to the tuple
>>> multiple_elements_string = tuple("Timbuktu")
('T', 'i', 'm', 'b', 'u', 'k', 't', 'u')
Los elementos de un iterable individual se añaden uno por uno:
>>> 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 el constructor tuple(<iterable>) solo acepta iterables (o nada) como argumentos, es mucho más fácil crear
una tupla de un solo elemento con el método literal.
>>> no_elements = ()
()
>>> one_element = ("Guava",)
("Guava",)
Las estructuras de datos anidadas se pueden incluir como elementos de tuple, incluidas otras 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"))
Las tuplas se pueden concatenar con el operador más +, que desempaqueta cada tuple y crea una nueva 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')
Se puede acceder a los elementos dentro de un tuple mediante la notación de corchetes usando un 0-based index desde la izquierda o un -1-based index desde la derecha.
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
Se puede iterar sobre los elementos dentro de un tuple en un bucle usando la sintaxis for item in <tuple>.
Si necesitas tanto los índices como los valores, puedes 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.
El operador in se puede usar para comprobar si un elemento pertenece a un tuple.
>>> multiple_elements_list = tuple(["Parrot", "Bird", 334782])
("Parrot", "Bird", 334782)
>>> "Parrot" in multiple_elements_list
True
Azara y Rui son compañeros de equipo que compiten en una búsqueda del tesoro con temática pirata. Uno tiene una lista de tesoros con coordenadas en el mapa, y el otro, una lista de nombres de ubicaciones con coordenadas en el mapa. También les dieron mapas en blanco con un punto de partida marcado con ESTÁS AQUÍ.
| La lista de Azara | La lista de Rui | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Pero las cosas están un poco desorganizadas: las coordenadas de Azara parecen estar formateadas y ordenadas de manera distinta a las de Rui, y tienen que ir de una lista a la otra para averiguar qué tesoros corresponden a qué ubicaciones. Como son unos pythonistas en ciernes, acudieron a ti para que les ayudes a escribir un pequeño programa (en realidad, un conjunto de funciones) que organice mejor la información de su búsqueda.
Implementa la función get_coordinate() que toma un par (treasure, coordinate) de la lista de Azara y devuelve solo la coordenada del mapa extraída.
>>> get_coordinate(('Scrimshawed Whale Tooth', '2A'))
2A
Implementa la función convert_coordinate() que toma una coordenada con el formato «2A» y devuelve una tupla con el formato ("2", "A").
>>> convert_coordinate("2A")
("2", "A")
Implementa la función compare_records() que toma un par (treasure, coordinate) y un registro (location, coordinate, quadrant) y compara las coordenadas de cada uno.
Devuelve True si las coordenadas coinciden, y False si no.
Vuelve a formatear las coordenadas según sea necesario para hacer una comparación 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
Implementa la función create_record() que toma un par (treasure, coordinate) de la lista de Azara y un registro (location, coordinate, quadrant) de la lista de Rui, y devuelve (treasure, coordinate, location, coordinate, quadrant) si las coordenadas coinciden.
Si las coordenadas no coinciden, devuelve la cadena «not a match».
Vuelve a formatear la coordenada según sea necesario para hacer una comparación 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"
Limpia los registros combinados de Azara y Rui para que quede solo un conjunto de coordenadas por registro. Haz un informe para que puedan ver una sola lista de todo lo que necesitan poner en sus mapas.
Implementa la función clean_up() que toma una tupla de tuplas (todo lo de ambas listas), recorre la tupla externa, descarta las coordenadas que no se necesitan de cada tupla interna y agrega cada una a un «informe».
Formatea y devuelve ese informe de modo que haya un registro limpio en cada línea.
>>> 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
"""
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.