我需要编写一个递归函数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]
我认为第二部分有问题,因为我看不出有什么问题,任何建议都没有给出完整的解决方案?
答案 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