3

getdigits(n)正の整数 n の数字のリストを返す再帰関数を作成する必要があります。

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

これまでのところ、私が持っているものは次のとおりです。

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

[1, 2, 4]しかし、私が得る代わりに124のために[[[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]

状態に問題が見られないため、2番目の部分に何か問題があると思います。ソリューション全体を提供せずに何か提案はありますか?

4

7 に答える 7

2

getDigits はリストを返すのに、リストを別のリスト (最後の行) にラップするのはなぜですか?

于 2012-05-13T12:44:47.350 に答える
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 に答える
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 に答える
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

ラムダの使用

(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
def getdigits(n):
    if n<10:
        return [n]
    else:
        return getdigits(n//10)+[n%10]

あなたの答えはフロートです。フロア分割を使用して、1.2 ではなく [1] にする必要があります。

于 2019-10-18T15:29:53.003 に答える