#python
#python
Вопрос:
Я использую простую функцию, которая должна фильтровать все слова длиной < 3. Поэтому я написал следующую функцию.
def my_tokenizer(tokens):
tokens = [t for t in tokens if len(t) > 3]
return tokens
x = my_tokenizer("sdfgds hj")
print x
Однако X выдает мой пустой массив. Есть мысли о том, где я ошибаюсь?
Комментарии:
1.
[t for t in tokens.split(' ') if len(t) > 3]
? В противном случае вы перебираете строку символ за символом.2. Альтернативный метод заключается в использовании
filter
функции (которую я предлагаю только потому, что вы специально используете слово «фильтр» в своем вопросе), напримерreturn list(filter(lambda x: len(x) > 3, tokens.split()))
.
Ответ №1:
Вы обрабатываете «токены», строку, как последовательность, поэтому она будет проходить по каждому символу. Строковый метод split() разделит строку на пробельные символы (words). Так что попробуйте:
tokens = [t for t in tokens.split() if len(t) > 3]