1

数値のリストと 2 つの整数 a と b を取り、リストのコピーを返す再帰関数を作成しようとしていますが、このコピーでは、引数として指定された数値のリスト内のすべての a が次のように置き換えられます。 b. このコードを書きましたが、シェルから実行した後、「なし」と表示されます (二重引用符なし)。

def replace(thelist,a,b):
    assert type(thelist)==list, `thelist` + ' is not a list'

    assert type(a)==int, `a` + ' is not an integer'

    assert type(b)==int, `b` + ' is not an integer'
    if len(thelist)==0:
        return []
    return ([b] if thelist[0]==a else [thelist[0]]).append(replace(thelist[1:],a,b))
4

3 に答える 3

1

.append の代わりに「+」を使用してください。たとえば [10].append([2]) が None を返すため、None を取得していました。

def replace(thelist,a,b):

 assert type(thelist)==list, `thelist` + ' is not a list'

 assert type(a)==int, `a` + ' is not an integer'

 assert type(b)==int, `b` + ' is not an integer'
 if len(thelist)==0:
     return []
 return ([b] if thelist[0]==a else [thelist[0]])+replace(thelist[1:],a,b)
于 2013-11-07T12:04:23.883 に答える
0
def replace(thelist,a,b):
    # assert stuff...
    if len(thelist)==0: return []
    if thelist[0] == a: r = [b] 
    else: r = [thelist[0]]
    return r + replace(thelist[1:], a, b)

print replace([1,2,3,1,3,4,1,2], 1, 10) 

与えます:

[10, 2, 3, 10, 3, 4, 10, 2]
于 2013-11-07T11:35:57.767 に答える