我在Python的edx在線課程,我必須做這個小程序,我認爲該函數是正確的,但它有錯誤時,一個元素從列表中刪除突然下一個元素不考慮進入測試。python函數的奇怪行爲
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發生同樣的情況。請幫忙,我不知道如何解決這個問題。
長話短說:你永遠不想在迭代它的同時改變列表。 – elethan
如果您確實想要在列表中迭代時刪除元素(即使這通常不是一個好主意),但最好的方法是從最大的索引開始,向最小的方向工作。這樣當一個元素被刪除時,它的刪除不會改變你仍然需要訪問的元素的任何索引。 –