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 se accede a la longitud de un elemento interno en una lista 2D/3D?

Esta función devuelve el número máximo de elementos de una lista, de una lista, en una lista. Creo que este es un enfoque correcto, pero sigo obteniendo el error:

'TypeError: los índices de lista deben ser enteros o rebanadas, no listas'

Aquí está la lista:

lista = [[0, [1, 2, 3]], [1, [0, 1, -3, 8, 5]], [2, [0, 7, 2, 1, -5]], [3, [0, 4, 1, -9]], [4, [0, 6, -2, 3]],
[5, [0]], [6, [0, 2, -1, 8]], [7, [0, -7, 3]], [8, [0, 8, 5, 6, 3]], [9, [0, -4, 1, 9]]]

Aquí está la función:

def max_inner_list_length(lista):

    máximo = 0

    for i in lista:
        if len(lista[i][1]) > máximo:
            máximo = len(lista[i][1])

    return máximo

Ejemplo:

max_inner_list_length(lista)

Salida esperada: 5

Salida real: TypeError: los índices de lista deben ser enteros o rebanadas, no listas

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema está en la línea if len(list[i][1]) > maximum: donde i es una variable que representa una lista en la variable list. En lugar de iterar sobre la list usando la variable i, deberíamos iterar sobre el índice de la list. Aquí está la función corregida:

    def max_inner_list_length(lst):
        máximo = 0
        for i in range(len(lst)):
            if len(lst[i][1]) > máximo:
                máximo = len(lst[i][1])
        return máximo
    

    Usamos la función range() para generar índices desde 0 hasta la longitud de la list, y luego usamos ese índice para acceder a las sub-listas.

    Ejemplo:

    lst = [[0, [1, 2, 3]], [1, [0, 1, -3, 8, 5]], [2, [0, 7, 2, 1, -5]], [3, [0, 4, 1, -9]], [4, [0, 6, -2, 3]],
    [5, [0]], [6, [0, 2, -1, 8]], [7, [0, -7, 3]], [8, [0, 8, 5, 6, 3]], [9, [0, -4, 1, 9]]]
    
    max_inner_list_length(lst)
    
    # Output: 5
    

    Esto debería devolver el resultado esperado.

Comments are closed.