Como bien sabrás, Python tiene listas. Como puede que no sepa, estas listas pueden contenerse.
a = []
a.append(a)
Estos son geniales y hay muchas cosas interesantes que puedes hacer con ellos, sin embargo, no puedes compararlos.
a = []
a.append(a)
b = []
b.append(b)
a == b
Tarea
Su trabajo es escribir una función en Python (o cualquier lenguaje que pueda manejar objetos de Python directamente) que tomará dos listas que pueden contener y compararlas.
Dos listas son iguales si tienen la misma longitud y no existe una secuencia de números, de modo que indexar ambas listas por esa secuencia da como resultado dos objetos que no son iguales bajo esta definición de igual. Todos los objetos que no están en la lista contenidos en una lista serán enteros de python por simplicidad y deben compararse con la igualdad incorporada de python para enteros.
Su programa no debe confiar en la profundidad de recursión de Python para determinar si una lista es infinitamente profunda. Es decir:
def isInfinite(a,b):
try:
a==b
return False
except RunTimeError:
return True
No es una forma válida de determinar si dos listas son autorreferenciales.
Casos de prueba
Asume que define una función equal
a = []
a.append(a)
b = []
b.append(b)
print(equal(a,b))
True
a = []
b = []
a.append(b)
b.append(a)
print(equal(a,b))
True
a = []
b = []
a.append(1)
a.append(b)
b.append(1)
b.append(a)
print(equal(a,b))
True
a = []
a.append(a)
b = [a]
print(equal(a,b))
True
a = []
b = []
c = []
a.append(b)
b.append(c)
c.append(a)
equal(a,b)
True
a=[1,[2]]
b=[1,[2,[1]]]
a[1].append(a)
b[1][1].append(b[1])
True
a = []
a.append(a)
b = [1]
b.append(a)
c = [1]
c.append([c])
print(equal(b,c))
False
a = []
b = []
a.append(1)
a.append(b)
b.append(a)
b.append(1)
print(equal(a,b))
False
a = []
b = []
a.append(a)
b.append(b)
b.append(b)
print f(a,b)
False