อย่างที่คุณทราบกันดีว่าหลามมีรายการอยู่ ในขณะที่คุณอาจไม่ทราบว่ารายการเหล่านี้สามารถมีตัวเอง
a = []
a.append(a)
สิ่งเหล่านี้เจ๋งและมีสิ่งที่น่าสนใจมากมายที่คุณสามารถทำได้กับพวกเขาอย่างไรก็ตามคุณไม่สามารถเปรียบเทียบได้
a = []
a.append(a)
b = []
b.append(b)
a == b
งาน
งานของคุณคือการเขียนฟังก์ชั่นใน Python (หรือภาษาใด ๆ ที่สามารถจัดการกับวัตถุหลามโดยตรง) ที่จะมีสองรายการที่อาจมีตัวเองและเปรียบเทียบพวกเขา
สองรายการมีค่าเท่ากันหากมีความยาวเท่ากันและไม่มีลำดับของตัวเลขเช่นนั้นซึ่งการทำดัชนีทั้งสองรายการตามลำดับนั้นจะส่งผลให้วัตถุสองรายการที่ไม่เท่ากันภายใต้คำจำกัดความที่เท่ากันนี้ วัตถุที่ไม่ใช่รายการทั้งหมดที่มีอยู่ในรายการจะเป็นจำนวนเต็มหลามเพื่อความง่ายและควรนำมาเปรียบเทียบกับความเสมอภาคของ python สำหรับจำนวนเต็ม
โปรแกรมของคุณไม่ควรใช้ความลึกในการเรียกซ้ำของไพ ธ อนเพื่อตรวจสอบว่ารายการนั้นมีความลึกไม่สิ้นสุด นั่นคือ:
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