Python отфильтровать список, удалить \ 'n' и пустую строку - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть список, я пытаюсь удалить пустую строку и '\ n'

re = ['\n', '\n', '0 / 6\n', '1 / 6\n', '2 / 6\n', '3 / 6\n', '4 / 6\n', '5 / 6\n', '6 / 6\n', '\n', 'mobile\n']

resul = map(str.rstrip, re)
print(list(resul))

str_list = filter(None, list(resul))
print(list(str_list))

вывод:

['', '', '0 / 6', '1 / 6', '2 / 6', '3 / 6', '4 / 6', '5 / 6', '6 / 6', '', 'mobile']
[]

Итак, первый вывод правильный, мне удалось удалить \n, но после того, как я хочу удалить пустой strinf, список пуст.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Вы получаете пустой список только потому, что преобразуете resul в список перед вызовом filter (для его печати), который его использует (потому что map возвращает объект map, который является генератором вПитон 3).Вы фактически передаете пустой генератор в filter.

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

 re = ['\n', '\n', '0 / 6\n', '1 / 6\n', '2 / 6\n', '3 / 6\n', '4 / 6\n', '5 / 6\n', '6 / 6\n', '\n', 'mobile\n']

resul = map(str.rstrip, re)
str_list = filter(None, list(resul))
print(list(str_list))

# ['0 / 6', '1 / 6', '2 / 6', '3 / 6', '4 / 6', '5 / 6', '6 / 6', 'mobile']
0 голосов
/ 12 сентября 2018

Возьмите все не-\n значения из списка и удалите \n через список-понимание:

re = ['\n', '\n', '0 / 6\n', '1 / 6\n', '2 / 6\n', '3 / 6\n', '4 / 6\n', '5 / 6\n', '6 / 6\n', '\n', 'mobile\n']

print([x.replace('\n', '') for x in re if x != '\n'])
# ['0 / 6', '1 / 6', '2 / 6', '3 / 6', '4 / 6', '5 / 6', '6 / 6', 'mobile']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...