Использование filter () для фильтрации слов, начинающихся с указанного c символа в Python (как использовать фильтр с 2 аргументами) - PullRequest
1 голос
/ 14 апреля 2020

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

new_list = []
def filter_words(word_list, c):
    for word in word_list:
        if word.startswith(c):
            new_list.append(word)
        else:
            continue
lst = ["Hello", "Cat", "Dog", "House", "Helmet", "Horse", "Bird"]
filter_words(l,"H")
print(new_list)

Это прекрасно работает - теперь я пытаюсь с методом filter ()

Я пробовал это

list(filter(filter_words, lst)), но я получил эту ошибку: TypeError: filter_woerter() missing 1 required positional argument: 'c'

, поэтому я попробовал это

list(filter(filter_words, l,'h')), но затем получил другую ошибку: TypeError: filter expected 2 arguments, got 3

Итак, как мне передать второй аргумент?

1 Ответ

0 голосов
/ 14 апреля 2020

Ваша filter_words функция уже принимает список (ну, итеративный) в качестве аргумента и выполняет фильтрацию сама, поэтому передача его в filter() не имеет смысла - filter() ожидает функцию, которая получает один элемент из итерируемый и возвращает логическое значение (обычно это называется «функцией предиката»). Я хочу, чтобы вы:

def word_starts_with(word, letter):
    return word.startswith(letter)

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

filter(lambda word: word_starts_with("H"), yourlistofwords)

Какой FWIW на самом деле является запутанным способом написать:

filter(lambda word: word.startswith("H"), yourlistofwords)

, что более идиотски написано с пониманием списка вместо:

[word for word in yourlistofwords if word.startswith("h")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...