Error de lista y tupla en Python

R

Actualmente estoy explorando las distinciones entre listas y tuplas en Python, pero he encontrado algunos desafíos para comprender sus matices. A continuación se muestra un fragmento de código que ilustra mis áreas de incertidumbre:

# Code Snippet 4
my_list = [1, 2, 3]
my_tuple = (4, 5, 6)

del my_list[0]
del my_tuple[0]

print(my_list, my_tuple)

Estos son los problemas específicos con los que estoy lidiando:

  1. A pesar de declarar my_list como una lista, encontré un comportamiento inesperado al intentar eliminar su primer elemento usando del my_list[0]. Sin embargo, al intentar eliminar el primer elemento de my_tuple usando del my_tuple[0], recibí un error que indicaba "TypeError: el objeto 'tuple' no admite la eliminación de elementos". ¿Por qué no puedo eliminar elementos de una tupla y en qué se diferencia esto de eliminar elementos de una lista?

  2. Al intentar eliminar el primer elemento de my_list usando del my_list[0], noté que la operación fue exitosa y la lista actualizada se registra como [2, 3]. Sin embargo, al revisar el resultado de la consola, noté que my_tuple permanece sin cambios como (4, 5, 6). ¿Qué podría estar causando esta discrepancia y cómo puedo asegurarme de que ambas estructuras de datos muestren sus valores actualizados correctamente?

  3. No estoy seguro de las ramificaciones de utilizar listas versus tuplas en Python, particularmente en términos de mutabilidad e inmutabilidad. ¿Podría explicar cuándo utilizar listas y tuplas según sus respectivas propiedades?

  4. Mientras experimentaba con listas y tuplas, descubrí efectos inesperados al intentar editar el contenido de una tupla con operaciones como del. ¿Puede aconsejarnos sobre las mejores formas y procedimientos para actualizar listas versus tuplas para minimizar errores y conservar la integridad de los datos?

Su conocimiento y ayuda serán muy bienvenidos a medida que atraviese estas complejidades y desarrolle mi comprensión de las listas y tuplas en Python. Gracias por su ayuda.

Dr_Manhattan

Las tuplas son inmutables y python da error cuando intentas modificar una. Borrar algo de una tupla es modificarla, por eso da error.

Sobre cuándo usar una u otra, pues para no confundirte, usa tuplas cuando vayas a usarla en solo lectura y listas en otro caso.

Los lenguajes de verdad lo que hacen es devolver una tupla nueva cuando borras un elemento de otra, así se mantiene la inmutabilidad y no tienes errores absurdos

1 1 respuesta
hda

Aquí tienes una buena descripción.
A las tuplas de Python se accede algo más rápido que a las listas, es decir, en tiempo de ejecución son ligeramente más eficientes. Otra cosa importante es que como son inmutables no hay que reservarles memoria, usan la definida al crearlas.

Con pandas es habitual recorrer las filas en forma de tuplas con itertuples(), en vez de ello también puedes a través de iterrows(), que es más lento.

#2Dr_Manhattan:

Los lenguajes de verdad

Desarrolla, que interesa eso de los lenguajes de verdad 😂

1 respuesta
Dr_Manhattan

#3 bueno, no quiero crear una discusión entre fanboys de diferentes lenguajes, lo que quería decir es que en el que yo trabajo, si modificas por ejemplo una lista inmutable, lo que hace es devolver una lista nueva, así la original se mantiene tal y como estaba y la trazabilidad a la hora de buscar errores es mejor, además de otras ventajas.

No me gusta nada el comportamiento de python en ese sentido con las tuplas.

por ejemplo, puedo tener este código:

val seq1: Seq[Sting] = Seq("test1", "test2", "test3")

val seq2 = seq1.patch(1, Nil, 1)

El resultado de esto sería una tupla seq2 que contendría (test1, test3).

Ya no entramos que se puede usar filter, take, drop etc. Es un ejemplo tonto

1 respuesta
carracho

Python es muy amigable/potente a la hora de operar con listas... si quieres trabajar con una tupla, pásala a lista y luego pásalo a tupla de nuevo.

Operaciones como:

  • (10,40) + (33,) = (10,40,33)
  • (10,40,33)[1:] = (40, 33)

devuelven nuevas tuplas...

#4 Lo de "patch" al final es más 'azúcar sintáctico' que otra cosa.
Una posible solución sería:

tuple([x for x,i in zip(("test1", "test2", "test3"), (1,0,1)) if i])
1 respuesta
Dr_Manhattan
#5carracho:

Lo de "patch" al final es más 'azúcar sintáctico' que otra cosa.

era un ejemplo para que se entendiese lo que estaba explicando

Eckooo

Ostia menudo botardo. Metiendo hilos escritos con IA y con SPAM de su web ajajajajaj

4 1 respuesta
carracho

#7 Anda... es ver el perfil y es muy cantoso xD

Los admins de este subforo están todos en el caribe trabajando con un portatil, caipiriña en mano,... y pasa lo que pasa, que terminan trabajando una mierda.

Dr_Manhattan

Hostias, de todas formas, bastante sutil el spam para lo que estamos acostumbrados xd.

El caso es que me pareció muy rara la forma de escribir

Usuarios habituales