0

だから私はこの関数を言ってみましょう:

squeeze([1,4,7,9], 8)
squeeze([1,4,7,9], 0)

関数が次を含む新しいリストを返すようにします。

[1,4,7,8,9]
[0,1,4,7,9]

この関数を再帰で作りたいのですが、困っています。

def squeeze(x:list, num:int):
    if len(x) == 1:
        if num < x[0]:
            return [num] + x #if the integer is less than the 1st value, put it in the front
        elif x[0] < num < x[2]: 
            return [x[0]] + [num] + [x[2]] #put it in the list
         #insert this number into the correct spot
    else: 
        return squeeze(num, x[0:1]) + squeeze(num, x[1:]) #i don't think this is right

リスト内の数値を比較し、再帰を使用して正しい場所に配置するのに問題があります。

4

2 に答える 2

0

OK、すでに賛成票を投じて受け入れた回答がありますが、これが単なる学習/宿題ではなく、誰かが実際にこれをやりたいと思っている可能性がある場合は、このためのモジュールがあります

bisectで利用できるものを確認してください。

from bisect import insort

a = [1,4,7,9]
insort(a, 10)
print a

a = [1,4,7,9]
insort(a, 8)
print a

a = [1,4,7,9]
insort(a, 0)
print a

出力は期待されるものですが、関係に関するポリシーを微調整することもinsort_leftあります。insort_right

注:これは新しいリストを返すのではなく、古いリストを変更しますが、最初に元のリストのコピーで簡単にラップして、2 行のsqueeze関数を残します。

于 2013-11-06T04:02:45.340 に答える