私はPythonのedxのオンラインコースにいて、この小さなプログラムを実行する必要があります。関数は正しいと思いますが、要素がリストから突然削除されると、次の要素がテストに考慮されないというバグがあります。 。
def f(i):
return i + 2
def g(i):
return i > 5
def applyF_filterG(L, f, g):
"""
Assumes L is a list of integers
Assume functions f and g are defined for you.
f takes in an integer, applies a function, returns another integer
g takes in an integer, applies a Boolean function,
returns either True or False
Mutates L such that, for each element i originally in L, L contains
i if g(f(i)) returns True, and no other elements
Returns the largest element in the mutated L or -1 if the list is empty
"""
# Your code here
i = 0
if len(L) == 0:
return -1
while i < len(L):
if not g(f(L[i])):
del L[i]
i += 1
return max(L)
この例でL = [0、-10、5、6、-4、-2]を試してみると、Lの値はL = [5,6]になりますが、結果は[-10、5、6 、-2] 0が削除された場合、要素-10はスキップされ、-4と-2でも同じことが起こります。助けてください、私はこれをどのように解決できるかわかりません。
Pythonのループ内で変更するリストを繰り返さないようにしてください。この例では、要素を削除した後にインデックスの順序が変更されています。反復する前にLのコピーを作成しましたが、それでうまくいきます。
def applyF_filterG(L, f, g):
copied_L = L[:]
for i in copied_L:
if not g(f(i)):
L.remove(i)
if len(L)==0:
return -1
else:
return max(L)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加