El valor de una lista puede ser cualquier cosa, incluyendo otra lista. Puedes crear una lista dentro de una lista de esta manera:
nested1 = [[3]]
print(len(nested1)) # => 1
nested2 = [1, [3, 2], [3, [4]]]
print(len(nested2)) # => 3
Cada elemento que es una lista se considera como una entidad única. Esto se puede ver por el tamaño de la segunda lista. La sintaxis de Python permite colocar los elementos de la lista que está siendo creada en líneas separadas. Reescribamos la creación de la segunda lista para que sea más claro:
arr2 = [
1, # primer elemento (número)
[3, 2], # segundo elemento (lista)
[3, [4]], # tercer elemento (lista)
]
len(arr2) # 3
La anidación no tiene límites. Puedes crear una lista de listas con listas dentro y así sucesivamente.
El acceso a listas anidadas puede parecer un poco inusual, aunque es lógico:
arr1 = [[3]]
arr1[0][0] # 3
arr2 = [1, [3, 2], [3, [4]]]
arr2[2][1][0] # 4
Es posible que al principio no siempre veas claramente cómo llegar al elemento que necesitas, pero eso es sólo una cuestión de práctica:
arr2 = [
1,
[3, 2],
[3, [4]],
]
arr2[2] # [3, [4]]
arr2[2][1] # [4]
arr2[2][1][0] # 4
Modificación y adición de listas a la lista:
arr1 = [[3]]
arr1[0] = [2, 10]
arr1.append([3, 4, 5])
# [[2, 10], [3, 4, 5]]
Las listas anidadas se pueden modificar directamente simplemente accediendo al elemento requerido:
arr1 = [[3]]
arr1[0][0] = 5
# [[5]]
Lo mismo se aplica a la adición de un nuevo elemento:
arr1 = [[3]]
arr1[0].append(10)
# [[3, 10]]
Las listas anidadas son muy versátiles y se utilizan en diversas situaciones, desde conceptos matemáticos como matrices hasta la representación de campos de juego. Por ejemplo, en el juego de tres en linea, una lista anidada puede ser muy útil.
Imagina que tienes un campo de juego de tres en linea, que puedes representar como una lista de listas en la que cada sublista representa una fila del tablero. Para verificar si hay al menos una ❌ o una ⭕ en el campo, dependiendo de lo que necesites comprobar, puedes escribir una función que recorra este tablero y haga la comprobación.
# Inicializamos el campo
field = [
[None, None, None],
[None, None, None],
[None, None, None],
]
# Hacemos una jugada:
field[1][2] = 'x'
# [
# [None, None, None],
# [None, None, 'x'],
# [None, None, None],
# ]
Ahora implementamos la función que realiza la comprobación:
def has_player_move(field, symbol):
# Recorremos el campo. Cada elemento es una fila en el campo de juego.
for row in field:
# El operador in verifica si el elemento está en la lista,
if symbol in row: # Si está presente, significa que encontramos lo que estábamos buscando.
return True
# Si el campo ha sido revisado y nada encontrado,
# significa que no hubo movimientos.
return False
Revisemos:
has_player_move(field, 'x') # True
has_player_move(field, 'o') # False
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.