es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo cambio un elemento en una lista anidada?

Soy un principiante en Python y necesito algún consejo.

He definido diez variables que todas tienen un valor de X e Y.

Luego puse estas variables (que en realidad son una lista) en otra lista llamada “pointlist”.

Ahora quiero usar un bucle for para cambiar el valor de X de cada variable.

Normalmente, puedo acceder al valor de X de la primera variable a través de “pointlist[0][0]”.

Cuando apliqué esto al bucle for, obtuve el siguiente error: “TypeError: list indices must be integers or slices, not tuple”.

¿Alguien tiene una idea de lo que me he perdido? ¡Muchas gracias de antemano!

import random
X=1350
Y=250

p1=[X, Y]
p2=[X, Y]
p3=[X, Y]
p4=[X, Y]
p5=[X, Y]
p6=[X, Y]
p7=[X, Y]
p8=[X, Y]
p9=[X, Y]
p10=[X, Y]
p11=[X, Y]
pointlist = [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11]

limit1=1150
limit2=1250

for i in enumerate (pointlist, start=1):
pointlist[i][0] = random.randrange(limit1, limit2)
limit1-=100
limit2-=100

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema en el código está en el uso de la función enumerate en el bucle for. La función enumerate devuelve una tupla, donde el primer elemento es el índice y el segundo elemento es el valor. En este caso, i es una tupla y no solo un índice entero. Por lo tanto, usar pointlist[i][0] resulta en un TypeError, ya que las tuplas no son índices válidos para una lista.

    En lugar de usar enumerate, el bucle for se puede modificar de la siguiente manera para iterar directamente sobre los elementos de la lista:

    for i in range(len(pointlist)):
        pointlist[i][0] = random.randrange(limit1, limit2)
        limit1 -= 100
        limit2 -= 100
    

    Aquí, range(len(pointlist)) genera índices enteros que se pueden usar para acceder a cada sublista en pointlist.

    ¡Espero que esto ayude!

Comments are closed.