Вместо того, чтобы писать функцию, которая помечает, если термин должен быть отфильтрован, просто завершите свою подпрограмму пониманием списка, которое выполняет фильтрацию.
filtered_list = [v for v in unfiltered_list if v[0]]
В вашем коде есть некоторые другие проблемы, но поскольку вы это сделалине спрашивай о них я не буду вдаваться в это.Измените переменные в строке, которую я показал вам, чтобы она соответствовала вашей программе.
Если вам нужна filter
функция Python , вы можете использовать это.
def find_term_derivative(term):
x , y = term
new_term = (y*x, y-1)
return new_term
def find_derivative(function_terms):
new_function = []
for term in function_terms:
new_term = find_term_derivative(term)
new_function.append(new_term)
return list(filter(zero_filter, new_function))
def zero_filter(atuple):
"""Note if the first element of a tuple is non-zero
or any truthy value."""
return bool(atuple[0])
print(find_derivative([(4, 3), (-3, 1)]))
print(find_derivative([(3, 2), (-11, 0)]))
Распечатка с того, что вы хотите:
[(12, 2), (-3, 0)]
[(6, 1)]
Я сделал ненулевую проверку в фильтре, используя питонический способ: вместо того, чтобы явно проверить, что значение не равно нулю, как в atuple[0] != 0
, я только что проверил «истинность» значения с помощью bool(atuple[0])
.Это означает, что значения None
или []
или {}
или ()
также будут отфильтрованы.Это не имеет значения в вашем случае.
Кстати, я использовал имя zero_filter
с тех пор, как вы это сделали, но мне кажется, что это не лучшее имя.Возможно, filter_out_zeros
будет лучше.