1

再帰を学ぼうとしています。リストをパラメーターとして取り、古いリストにあった値が新しいリストに一度だけ表示される新しいリストを返そうとしています。私はこれに何時間も取り組んできましたが、行き詰まり続けています。

4

3 に答える 3

2
if (old_list[0] not in new_list):

この時点で new_list は常に空であるため、この条件は常に真であり、すべての要素が新しいリストに追加されることに注意してください。

コードを少し調整するだけで、正しく機能しなくなります。アイテムが new_list にあるかどうかを確認する代わりに、古いリストの残りの部分にあるかどうかを確認する必要があると思います:

if (old_list[0] not in old_list[1:]):
于 2012-11-22T04:52:15.800 に答える
1

問題は2番目のifステートメントにあると思います:

def bag_to_set(old_list):
    new_list = []
    if old_list == []:
        new_list = []
    else:
        if (old_list[0] not in old_list[1:]):
            new_list = [old_list[0]] + bag_to_set(old_list[1:])
        else:
            new_list = bag_to_set(old_list[1:])
    return new_list 

条件で new_list を old_list[1:] に置き換えることで、これが修正されたように見えます

于 2012-11-22T04:51:35.277 に答える
0

ばかげた質問: なぜ else の後に 2 番目の if があるのですか? 次のように言うと、少しスムーズになると思います。

if old_list == []:
  new_list == []
elif old_list[0] not in old_list[1:]:
   new_list = [old_list[0]] + bag_to_set(old_list[1:])
else: 
   new_list = [old_list[0]] + bag_to_set(old_list[1:])

これにより、1 レベルのネストが回避されます。些細な点ですが、そこに投げる価値があるかもしれないと思いました...

于 2012-11-22T05:51:04.100 に答える