2016-02-05 2 views
3

У меня есть следующий список:Удаление списка имеющих пустой список

a = [[['trial1', 'trial2'], 4], [[], 2]] 

, и я хочу, чтобы удалить список, который есть внутри пустой list.So следующий результат:

c = [[['trial1', 'trial2'], 4]] 

Я использую следующий код:

c = [] 
for b in a: 
    temp =[x for x in b if x] 
    if len(temp)>1: 
     c.append(temp) 

Это работает нормально, но, похоже, это не «хороший способ» выполнить эту задачу. Есть ли более элегантный способ?

ответ

0

Вы можете использовать встроенную функцию filter.

a = [[['trial1', 'trial2'], 4], [[], 2]] 
assert filter(lambda o: [] not in o, a) == [[['trial1', 'trial2'], 4]] 

Поскольку в Python 3 фильтр ленив, вам может потребоваться явное преобразование в список.

assert list(filter(lambda o: [] not in o, a)) == [[['trial1', 'trial2'], 4]] 
1

Вы можете использовать list comprehension и all функцию, чтобы проверить, все ли в списке evaluted к True:

c = [i for i in a if all(i)] 

print(c) 
[[['trial1', 'trial2'], 4]] 
Смежные вопросы