递归提取数字

时间:2012-05-13 12:41:48

标签: python recursion

我需要编写一个递归函数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]

我认为第二部分有问题,因为我看不出有什么问题,任何建议都没有给出完整的解决方案?

7 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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]

答案 2 :(得分:1)

已回答同一问题before,请参阅该链接了解详情。

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

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

你可以简单地使用它:

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

答案 5 :(得分:0)

使用Lambda

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

答案 6 :(得分:0)

static void add_strings(string root)
    {
        Deedle.Frame<int, string> df = Frame.ReadCsv("data_strings.csv");

        Series<int, string> a = df.GetColumn<string>("L");
        Series<int, string> b = df.GetColumn<string>("R");

        RowSeries<int, string> rs = df.Rows;

        SeriesBuilder<int, string> c = new SeriesBuilder<int, string>();
        for (int i = 0; i < rs.KeyCount; i++)
        {
            c.Add(i, a[i] + b[i]);
        }

        df.AddColumn("C", c);
        df.Print();
    }

您的答案是浮动的。您需要使用楼板分割来使其成为[1]而不是1.2