2010-07-24 4 views
0

keywords_list = «» « корова собака кошка „“»Python: Пустой элемент остается после списка понимания

keywords_list = [i.strip() for i in keywords_list.split("\n") if i] 

Я все еще получаю пустой элемент (последний элемент), и я Интересно, почему. Также будут оценены предложения по улучшению моего кода.

Заранее благодарен!

Редактировать: решил сам, сняв сначала строку, но мне все еще интересно, почему в списке остался пустой элемент строки.

Вот мое решение:

keywords_list = [i.strip() for i in keywords_list.strip().split("\n")] 

ответ

2

Вы проверки if i, и что преуспевает для любого непустых строк i - в том числе и тот, который все пробела и так будет производить пустую строку после удаления. Чтобы исправить, используйте

if i and not i.isspace() 

как условие вашего listcomp (в так это удается только для непустых, не-все-пробельных строк).

+0

Вы можете сделать вывод, что я пришел из программирования PHP;) – user295284

1

решил сам, сняв строку сначала, но мне все еще интересно, почему в списке остался пустой элемент строки.

Поскольку ваша первая строка "\ ncow \ ndog \ NCAT \ п", поэтому, когда вы разделяете ('\ п'), вы получите [ '', 'корова', 'собака', 'кошка' , '']. Его просто способ разделения работает - всякий раз, когда он находит разделитель, он разбивает содержимое на 2 элемента, один для части перед разделителем, один для части после него, даже если один из них пуст.

1

Если у вас есть строка 'abc<sep>def<sep>ghi', вы явно хотите, чтобы раскол производил ['abc', 'def', 'ghi']. Если ваша строка усечена до 'abc<sep>def<sep>', у вас все еще есть два разделителя, поэтому вы все равно будете иметь три элемента списка, последний из которых будет пустой строкой, следующей за вторым разделителем.

Короче говоря, ваша строка использует '\n'как терминатор, но функция сплит интерпретирует это как сепаратор.

Вы можете исправить это, не требуя strip(). Подумайте о '\n' в качестве разделителя, и удалите конечный символ новой строки из входной строки:

keywords_list = """ 
cow 
dog 
cat""" 
Смежные вопросы