Seperti yang Anda ketahui, python memiliki daftar. Karena Anda mungkin tidak tahu daftar ini dapat memuat diri mereka sendiri.
a = []
a.append(a)
Ini keren dan ada banyak hal menarik yang dapat Anda lakukan dengannya, namun Anda tidak dapat membandingkannya.
a = []
a.append(a)
b = []
b.append(b)
a == b
Tugas
Tugas Anda adalah menulis fungsi dengan Python (atau bahasa apa pun yang dapat menangani objek python secara langsung) yang akan mengambil dua daftar yang mungkin berisi dirinya sendiri dan membandingkannya.
Dua daftar sama jika panjangnya sama dan tidak ada urutan angka sehingga indeks kedua daftar dengan urutan itu menghasilkan dua objek yang tidak sama di bawah definisi yang sama ini. Semua objek non-daftar yang terkandung dalam daftar akan menjadi bilangan bulat python untuk kesederhanaan dan harus dibandingkan dengan persamaan builtin python untuk bilangan bulat.
Program Anda seharusnya tidak mengandalkan kedalaman rekursi dari python untuk menentukan apakah suatu daftar memiliki kedalaman tak terhingga. Itu adalah:
def isInfinite(a,b):
try:
a==b
return False
except RunTimeError:
return True
Bukan cara yang valid untuk menentukan apakah dua daftar adalah referensial sendiri.
Testcases
Asumsikan Anda mendefinisikan suatu fungsi 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