2017-04-11 24 views
0

私はリストlist=[3,2,1,3,2,1]を受け取り、すべてのアイテムについて、そのアイテムが値aであるかどうかを確認し、bの値をthelistに置き換え、そのコピーを返します。(再帰的に)変更されたリストを返すか?

def replace(list,a,b): 
    #base case 1: list is empty 
    if list==[]: 
     return list 
    #case 1: the first character is a 
    elif list[0] == a: 
     list[0] = b 
     return replace(list[1:],a,b) 
    #case 2: the first character is not a 
    elif list[0]!=a: 
     return replace(list[1:],a,b) 
    return list 

私の問題は、このコードからの私(が各再帰を印刷し、print文が息切れのために取り出した)出力はこのようになっていることである:

[3,2,1,3,2,1] 
[2,1,3,2,1] 
[4,3,2,1] 
[3,2,1] 
[2,1] 
[4] 

これは、これまでの私のコードです私が探している出力は:

[3,2,4,3,2,4] 

出力を得る方法がわかりません。

+0

あなたがリストのELEMENTOSを反復処理すると= –

+0

すべての要素をチェックするループを必要とする方法はありますfor-loopなしでそれをするには? – Jam

+0

jjb:これは別の質問です。 – martineau

答えて

1

もう一度通話を交換すると、最初の要素が見つかりませんでした。結果の先頭に最初の要素を追加するだけです。再帰witout

def replace(thelist,a,b): 
    #base case 1: thelist is empty 
    if thelist==[]: 
     return thelist 
    #case 1: the first character is a 
    elif thelist[0] == a: 
     thelist[0] = b 
    return thelist[:1] + replace(thelist[1:], a, b) 


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

同じ結果:

def replace_list(thelist,a,b): 
    return [ b if l == a else l for l in thelist ] 

print replace_list([3,2,1,3,2,1], 1, 4) 

出力:

[3, 2, 4, 3, 2, 4] 
+1

'elements'、' condition_value'、 'replacement_value'のようなものにパラメータの名前を変更することは素晴らしいことでしょう。 –

関連する問題