如何递归地分割列表并比较相邻的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何递归地分割列表并比较相邻的值相关的知识,希望对你有一定的参考价值。

enter code here如果不提供解决方案,有人可以帮助我了解如何表示此模式。我认为您需要检查以递归方式查看nth + 1> nth值。由于这不是一个列表,我想我需要使用模和底数除法来遍历该列表。但是,只有两个return语句,我不知道如何递归调用该函数以及如何返回True和False。

问题陈述:孔号是一个数字,其中每隔一个数字就降到与其紧邻的数字之下。例如,数字968将被视为孔号,因为数字6小于其两个周围的数字。假设我们只传递数字为奇数的数字。定义以下功能,以便正确识别孔号。

def check_hole_number(n):
    """
    >>> check_hole_number(123)
    False
    >>> check_hole_number(3241968)
    True
    >>> check_hole_number(3245968)
    False
    """
    if _________________________________________________________:
        return _________________________________________________________
    return ______________________________________________________________

我的解决方案:

def check_hole_number(n):
    if n // 10 == 0:
        return True
    return (n % 10) > (n // 10 % 10) and (n // 10 % 10) < (n // 100 % 10) \
    and check_hole_number(n // 100)
答案

模式将类似于:

您必须在每个步骤中检查当前数字的前3位数字:

  • 检查(在if语句中)如果前三个数字符合hole number条件
  • 如果前3位数字符合hole number条件,则请检查当前步骤中是否具有最后3位数字:

    • [如果您有最后3位数字,那么您应该返回True(您已经检查了所有其余数字,现在您确定数字是hole number)]
    • 如果没有最后3位数字,则必须再次调用函数以检查接下来的数字(必须跳过前2位数字)
  • 如果当前的前三位数不是hole number,则应返回False

def check_hole_number(n):
    """
    >>> check_hole_number(123)
    False
    >>> check_hole_number(3241968)
    True
    >>> check_hole_number(3245968)
    False
    """
    if str(n)[1] < str(n)[0] and str(n)[1] < str(n)[2]:
        return True if len(str(n)) == 3 else check_hole_number(str(n)[2:])

    return False

此外,您也可以检查当前步骤中的最后3位数字:

def check_hole_number(n):
    """
    >>> check_hole_number(123)
    False
    >>> check_hole_number(3241968)
    True
    >>> check_hole_number(3245968)
    False
    """
    if n // 10 % 10 < n % 10 and  n // 10 % 10 <  n % 1000 // 100:
        return True if n < 1000 else check_hole_number(n // 100)

    return False
另一答案

我在下面实现了一个示例,欢迎您寻求帮助。如果您不希望这样做,请遵循以下提示:

作为提示:

  1. 如果使用递归,则始终需要一个终止条件,否则,该函数将无休止地进行自身调用,因此请考虑不应使用哪些输入再次调用该函数。如果使用此输入调用了您的函数(通过递归调用),则只需返回一个值,一个布尔值,就不必再次调用该函数。

  2. 您已经在使用正确的方式来定义递归的新函数调用,但是实际上n [1:]可以用作新输入吗?再考虑一下,并使用示例手动浏览该功能。

  3. 何时需要另一个函数调用?或者换句话说:什么时候可以确定输入n不是孔号?设置此条件并根据条件是true还是false设置函数调用。

  4. 一般提示:int类型的变量在Python中不可下标,因此您始终必须将数字转换为str,即字符串表示形式

!剧透;-)!一个示例实现(仅在以下假设下有效:inputNumber mod 2 != 0)在这里能找到它:https://www.codepile.net/raw/NpoRbalV.py

以上是关于如何递归地分割列表并比较相邻的值的主要内容,如果未能解决你的问题,请参考以下文章

如何递归遍历 R 列表中的所有键值对并修改值? [复制]

如何有效地比较列表并获得最频繁的对?

在 python 中,如何有效地找到列表中不一定相邻的最大连续数字集?

如何在不停止递归的情况下返回递归函数中的值?

如何简洁地比较许多派生类的基类的值并调用它们的函数?

如何递归地分配 perl 多维哈希的键的值,其中该键类似于嵌套键的值?