2013-12-01 4 views
0
a = ['bb', '', '', '', 'cc'] 

Я хочу удалить «» в списке а и возвращает следующий список:удалить пробелы в списке ул

a = ['bb', 'cc'] 

до сих пор, у меня есть этот код:

new_a = [] 
for item in a: 
    if item != '': 
    new_a.extend(item) 

это дает мне тот же результат:

new_a = ['b', 'b', 'c', 'c'] 

, но я хочу:

new_a = ['bb', 'cc'] 

Как я могу изменить существующий код, чтобы получить new_a = [ 'BB', 'CC'] без использования каких-либо других модулей?

+2

Ваш код работал бы, если бы у вас была ".append" вместо ".extend". Extend расширяет список с помощью другой последовательности и интерпретирует «bb» как последовательность из двух символов «b». Append рассматривает «bb» как одно значение. – RemcoGerlich

ответ

4

Используйте список-Комп:

new_a = [el for el in a if el] 

Возьмите каждый элемент из a, если он оценивает как «truthy» ... Если вы хотите сделать, включают в явном виде только не пустые строки, то вы будете использовать :

new_a = [el for el in a if el != ''] 

в качестве альтернативы, изменить существующий код для использования append (который добавляет новый единый элемент в конец списка) вместо extend (который добавляет Iterable элементов к концу - «ВВ» два предметы - следовательно, вы получаете b и b отдельно):

new_a = [] 
for item in a: 
    if item != '': 
     new_a.append(item) 
2

Другой вариант, чтобы решить вашу проблему, '' является строковый объект нулевой длины, так что вы можете использовать фильтр списка понимания, чтобы получить только строку с Len> 0.

>>> a = ['bb', '', '', '', 'cc'] 
>>> filter(lambda x: len(x) > 0, a) 
['bb', 'cc'] 
>>> 

ИЛИ

>>> filter(lambda x: x.strip(), a) 
['bb', 'cc'] 
>>> 
+0

Это правильное решение, но менее изящное, чем списки, как показал Джон Клементс. –

Смежные вопросы