আপনি যেমন খুব ভাল জানেন অজগর তালিকার আছে। আপনি জানেন না যেহেতু এই তালিকাগুলি সেগুলি ধারণ করতে পারে।
a = []
a.append(a)
এগুলি দুর্দান্ত এবং আপনি তাদের সাথে অনেক মজার কাজ করতে পারেন তবে আপনি সেগুলি তুলনা করতে পারবেন না।
a = []
a.append(a)
b = []
b.append(b)
a == b
কার্য
আপনার কাজটি হল পাইথনে একটি ফাংশন (বা যে কোনও ভাষা যা পাইথন অবজেক্টগুলি সরাসরি পরিচালনা করতে পারে) লিখতে পারে যেগুলি দুটি তালিকাগুলি নিতে পারে যা সেগুলি ধারণ করে এবং তাদের তুলনা করতে পারে।
দুটি তালিকাগুলি সমান হয় যদি সেগুলি একই দৈর্ঘ্য হয় এবং সংখ্যার ক্রমিকের অস্তিত্ব থাকে না যে সেই ক্রম অনুসারে তালিকাগুলি উভয়কেই সূচিত করে এমন দুটি বস্তুর ফলাফল করে যা সমান এই সংজ্ঞা অনুসারে সমান হয় না। তালিকায় থাকা সমস্ত নন-লিস্ট অবজেক্টগুলি সরলতার জন্য অজগর পূর্ণসংখ্যা হবে এবং পূর্ণসংখ্যার জন্য পাইথনের বিল্টিন সমতার সাথে তুলনা করা উচিত।
কোনও তালিকা অসীমভাবে গভীর কিনা তা নির্ধারণ করতে আপনার প্রোগ্রামটি অজগরটির পুনরাবৃত্তির গভীরতার উপর নির্ভর করবে না । এটাই:
def isInfinite(a,b):
try:
a==b
return False
except RunTimeError:
return True
দুটি তালিকা স্ব-রেফারেন্সিয়াল কিনা তা নির্ধারণের একটি বৈধ উপায় নয়।
Testcases
ধরে নিন আপনি কোনও ফাংশন সংজ্ঞায়িত করেছেন 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