#python-2.7 #python-3.x
#python-2.7 #python-3.x
Вопрос:
У меня есть код, и я думаю, что он готов, у меня просто одна проблема, когда выполняется мой цикл, и я удаляю что-то из списка, он пропускает следующую переменную в списке, и я не могу понять, как сделать так, чтобы она не пропускала его. Я предполагаю, потому что следующая переменная равна 0, и цикл думает, что он уже сделал 0. Есть ли способ это исправить. Код ниже
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
"""
for i in L:
if g(f(i)) == False:
L.remove(i)
return max(L)
L = [0, -10, 5, 6, -4]
print(applyF_filterG(L, f, g))
print(L)
Комментарии:
1. Уверен, что вы нарушаете кодекс чести, публикуя здесь, MIT предоставляет множество форумов для получения помощи, я бы посоветовал вам использовать их вместо публикации здесь.
Ответ №1:
Попробуйте скопировать все значения L в L_temp, чтобы не перепутать L при выполнении итераций и избежать пропуска значений при изменении списка. Должно быть что-то вроде этого
def applyF_filterG(L, f, g):
L_temp = L[:]
for i in L_temp:
if g(f(i)) == False:
L.remove(i)
if len(L) == 0:
return -1
else:
return max(L)
Ответ №2:
Более кратко:
max(x for x in L if f(g(x)))
Чтобы изменить список:
L[:] = [x for x in L if f(g(x))]
return max(L)
Ответ №3:
def applyF_filterG(L, f, g):
l = []
if len(L) > 0:
for i in L:
if (g(f(i)) == True):
l.append(i)
L[:] = l
if len(L) > 0:
return max(L)
else:
return -1
else:
L[:] = l
return -1
этот код работает