递归提取数字

gcum 发布于 2019-01-11 python 最后更新 2019-01-11 22:59 36 浏览

我需要编写一个递归函数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] 获得数字(1)= [1] 因此,getdigits(124)= [1] + [2] + [4] = [1,2,4] 我认为它的第二部分有什么问题,因为我看不出有什么问题,没有提供整个解决方案的任何建议?
已邀请:

ehic

赞同来自:

before回答了同样的问题,请参阅链接了解更多详情。

def getdigits(n):
    if n < 10:
        return [n]
    return getdigits(n/10) + [n%10]
getdigits(123)
> [1, 2, 3]
以上将适用于整数n> = 0,请注意您不必将getdigits(n/10)的结果包装在另一个列表中。

prem

赞同来自:

使用Lambda

(lambda x: [int(a) for a in str(y)])(number)

sest

赞同来自:

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

iid

赞同来自:

您的问题是您要返回[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]

yvitae

赞同来自:

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

>>> def getdigits(n):
...    return [int(y) for y in str(n)]
... 
>>> getdigits(12345)
[1, 2, 3, 4, 5]

asaepe

赞同来自:

你可以简单地使用这个:

>>> num=124
>>>list(map(int,str(num)))
[1,2,4]