ご存じのとおり、pythonにはリストがあります。知らないかもしれませんが、これらのリストには自分自身を含めることができます。
a = []
a.append(a)
これらはクールで、あなたがそれらでできる面白いことがたくさんありますが、それらを比較することはできません。
a = []
a.append(a)
b = []
b.append(b)
a == b
仕事
あなたの仕事は、Python(またはpythonオブジェクトを直接処理できる任意の言語)で関数を記述し、それ自体を含む2つのリストを取得して比較することです。
2つのリストが同じ長さであり、番号のシーケンスが存在しない場合、そのシーケンスで両方のリストにインデックスを付けると、2つのオブジェクトは、この等しいという定義の下で等しくなくなります。リストに含まれるすべての非リストオブジェクトは、簡単にするためにPython整数になります。整数のPythonの組み込みの同等性と比較する必要があります。
リストが無限に深いかどうかを判断するために、プログラムは Pythonの再帰の深さに依存してはなりません。あれは:
def isInfinite(a,b):
try:
a==b
return False
except RunTimeError:
return True
2つのリストが自己参照であるかどうかを判断する有効な方法ではありません。
テストケース
関数を定義すると仮定します 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