3

我需要编写一个递归函数getdigits(n),它返回正整数 n 中的数字列表。

例子getdigits(124) => [1,2,4]

到目前为止,我得到的是:

def getdigits(n):
    if n<10:
        return [n]
    else:
        return [getdigits(n/10)]+[n%10]

但是对于 124 而不是[1, 2, 4]我得到[[[1], 2], 4]

在我的脑海中工作它就像:

getdigits(124) = [getdigits(12)] + [4]
getdigits(12) = [getdigits(1)] + [2]
get digits(1) = [1]

所以getdigits(124) = [1] + [2] + [4] = [1, 2, 4]

我认为它的第二部分有问题,因为我看不出这种情况有什么问题,有没有给出整个解决方案的建议?

4

7 回答 7

2

getDigits 返回一个列表,那么为什么要将列表包装到另一个列表中(最后一行)?

于 2012-05-13T12:44:47.350 回答
1

您的问题是您返回[n]而不是n或使用[getDigits(n / 10)]而不是getDigits(n / 10).

例如,以您的示例为例:

getDigits(124) = [getDigits(12)] + [4] = [getDigits(12), 4]
getDigits(12) = [getDigits(1)] + [2] = [getDigits(1), 2]
getDigits(1) = [1]

因此如下:

getDigits(12) = [[1], 2]
getDigits(124) = [[[1], 2], 4]
于 2012-05-13T12:47:11.607 回答
1

之前已经回答了同样的问题,请参阅链接以获取更多详细信息。

def getdigits(n):
    if n < 10:
        return [n]
    return getdigits(n/10) + [n%10]

getdigits(123)
> [1, 2, 3]

以上将适用于整数 n >= 0,请注意您不必将结果包装getdigits(n/10)另一个列表中。

于 2012-05-13T13:26:54.737 回答
0

使用 Lambda

(lambda x: [int(a) for a in str(y)])(number)
于 2013-01-29T09:06:03.023 回答
0

你可以简单地使用这个:

>>> num=124
>>>list(map(int,str(num)))
[1,2,4]
于 2012-05-13T13:23:48.193 回答
0

您的问题听起来像家庭作业(递归要求),但这可以通过list comprehension

>>> def getdigits(n):
...    return [int(y) for y in str(n)]
... 
>>> getdigits(12345)
[1, 2, 3, 4, 5]
于 2012-05-13T13:05:36.110 回答
0
def getdigits(n):
    if n<10:
        return [n]
    else:
        return getdigits(n//10)+[n%10]

你的答案是浮动的。您需要使用地板除法使其 [1] 而不是 1.2

于 2019-10-18T15:29:53.003 回答