Фильтрация конкретных терминов - PullRequest
0 голосов
/ 19 июня 2019

Я написал функцию, которая использует правило производного продукта для поиска производного термина:

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)

        filtered_terms = filter(zero_filter, new_term)

find_derivative[(4, 3), (-3, 1)]

Ouputs [(12, 2), (-3, 0)]

Однако я хочу использовать функцию фильтра, чтобы удалить любыеусловия, вывод которых начинается с нуля.

Например, Inputs [(3, 2), (-11, 0)] В настоящее время Outputs [(6, 1), (0, -1)]

Однако я хочу отфильтровать и удалить второе слагаемое, поскольку оно начинается с 0, удаляя его из словаря new_function

Я пытаюсь определить функцию фильтра, которая анализирует первый член каждого кортежа и проверяет, равен ли он 0, и удаляет его, если есть.Это как функция фильтра используется?

def zero_filter(variable):
    if new_term [0] = 0:
        return False 
    else:
        return True

1 Ответ

0 голосов
/ 19 июня 2019

Вместо того, чтобы писать функцию, которая помечает, если термин должен быть отфильтрован, просто завершите свою подпрограмму пониманием списка, которое выполняет фильтрацию.

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 будет лучше.

...