Çok iyi bildiğiniz gibi python listeleri vardır. Bilmediğiniz gibi bu listeler kendilerini içerebilir.
a = []
a.append(a)
Bunlar harika ve onlarla yapabileceğiniz birçok ilginç şey var, ancak bunları karşılaştıramazsınız.
a = []
a.append(a)
b = []
b.append(b)
a == b
Görev
İşiniz, Python'da (veya doğrudan python nesnelerini işleyebilen herhangi bir dilde) kendilerini içerebilecek iki liste alacak ve bunları karşılaştıracak bir işlev yazmaktır.
İki liste aynı uzunluktaysa eşittir ve her iki listenin de bu diziye endekslenmesi, bu eşit tanımı altında eşit olmayan iki nesne ile sonuçlanacak şekilde bir sayı dizisi yoktur. Bir listede yer alan tüm liste dışı nesneler, basitlik için python tamsayılarıdır ve python'un tamsayılar için yerleşik eşitliği ile karşılaştırılmalıdır.
Programınız olmamalıdır bir liste sonsuz derin olup olmadığını belirlemek için pitonun tekrarlama derinliğiyle güveniyor. Yani:
def isInfinite(a,b):
try:
a==b
return False
except RunTimeError:
return True
İki listenin kendi kendine referans olup olmadığını belirlemenin geçerli bir yolu değildir.
testcases
Bir işlev tanımladığınızı varsayar 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