递归检查列表元素是否相等

时间:2016-12-19 00:59:25

标签: python-3.x recursion equality

嘿有其他程序员,我想以递归的方式检查列表元素的相等性。以下代码剪断应该完成此任务,但我可能误解了一些东西。如果我测试函数are_numbers_equal([2,2,2,2])我得到False而不是True。我会感谢你的帮助!很多爱< 3

代码:

def are_numbers_equal(self, numbers):
    if len(numbers) > 1:
        return numbers.pop() == self.are_numbers_equal(numbers)
    else:
        return numbers.pop()

1 个答案:

答案 0 :(得分:2)

调用您的函数ane

ane([2, 2,  2, 2]) = (2 == ane([2, 2, 2]))
                   = (2 == (2 == ane([2, 2])))
                   = (2 == (2 == (2 == ane([2]))))
                   = (2 == (2 == (2 == 2)))
                   = (2 == (2 == True))
                   = (2 == False)
                   = False

除了递归逻辑的明显问题之外,您的解决方案还有多个缺陷:

  • 它修改输入列表(处理后列表为空)
  • 单个元素列表肯定会失败
  • 它没有说明列表是空的情况(例如,通过提出ValueError
  • 效率非常低(列表在每个递归步骤中完全遍历)

有关如何检查列表中所有元素是否相等的详细答案,请参阅https://stackoverflow.com/a/3844832/2246024