我试图创建一个函数allsametree(tree)
,该函数将一个列表tree
作为输入,如果列表中的所有元素在数字上相同,则返回TRUE或FALSE。到目前为止,我有以下功能:
def allsametree(tree):
if not type(tree) == list:
return tree
if type(tree) is list:
final_lst = []
for item in tree:
final_lst.append(allsametree(item))
return final_lst[1:] == final_lst[:-1]
虽然在大多数情况下,该函数是有效的,但在计算allsametree([1, [[[[[2]]]]]])
时遇到了问题
您有什么建议或其他解决此问题的方法吗
可以递归地将列表转换为一组项目,如果整个项目集的长度为1,则返回true:
另一种方法。将其拆分为两个操作:展平和检查所有值是否相同
展平将嵌套的iterable转换为单个维度的iterable。所以
[1, [[[[[2]]]]]]
变成了[1,2]
然后读取第一个值并循环检查其余值,以检查它们是否与第一个值相同
这是密码
这不仅适用于列表,而且适用于任何
iterable
,因为它使用延迟求值,当它找到两个不相等的值时,它将停止。这可以避免你做不必要的工作。它还可以避免在每次递归调用时实例化正在构造的临时集合(列表、集合等)Here's一些测试输入
相关问题 更多 >
编程相关推荐