Вы не должны помещать return
в цикл; он вернет только первый элемент, соответствующий вашему условию.
Вы также не должны зацикливаться в своей функции фильтра, потому что вы фактически зацикливаетее на символах строк , которые все имеют длину 1.
Следовательно, первый символ всегда возвращает истинное значение, возвращая вам первоначальный ввод после фильтрации
Вам нужно только проверить длину ввода, и в идеале функции фильтра должны возвращать соответствующие логические условия, а не истинные значения (в вашем случае return i
возвращает непустую строку)
def lengthgood(x):
return len(x)<13
Если вам не нужно использовать filter()
, вы можете написать понимание списка
final_list=[a if len(a) < 13 for a in attendancelist]