嵌套结构比较



我正在尝试用递归编写嵌套结构比较。看起来很基本,但不起作用:当我比较len(original)len(other)时,它们是不同的,但它没有return False.为什么?

def same_structure_as(original,other):
if type(original) != type(other) or len(original) != len(other):
return False
for i in range(len(original)):
if type(original[i]) != type(other[i]):
return False
if type(original[i]) is list and type(other[i]) is list:
same_structure_as(original[i],other[i])
return True
print (same_structure_as([1,[1,1]], [2,[2]]))

如前所述,您的代码没有考虑递归结果。我更正了它并使用组合循环而不是重复繁琐的索引。(我仍然不喜欢多重返回结构(。请注意,您不会比较循环中的简单值,因此仍然需要用于列表类型比较的 else 部分。否则,这将按预期工作:

def same_structure_as(original, other):
if type(original) != type(other) or len(original) != len(other):
return False
for org_val, other_val in zip(original, other):
if type(org_val) != type(other_val):
return False
if type(org_val) is list and type(other_val) is list:
if not same_structure_as(org_val, other_val):
return False
return True
print (same_structure_as([1,[1,1]], [2,[2]]))

抓挠我原来的答案,但这更与你的嵌套数组长度有关。

len([1,[1,1]])的长度为 2。它不会计算内部嵌套项目。因此,将此嵌套列表与其他列表进行比较将传递您的 if 检查。

最新更新