2014-12-12 3 views
0

У меня есть список, как это:Как я могу удалить None элементы из списка списков

a = [[None, None, None], 
    [None, None, None], 
    [40.069, 18.642, 1.0], 
    [41.18, 19.467, 1.0], 
    [None, None, None]] 

Я хочу, чтобы это было так. Каков наилучший способ сделать это? Благодаря

b = [[40.069, 18.642, 1.0], [41.18, 19.467, 1.0]] 
+1

Для меня это не Чисто. вы удалите '[None, 1.0, None]'? Как я думаю, это приведет к другому ответу. – xbb

ответ

1

Вы можете использовать filter:

filtered = list(filter(any, a)) 
+2

Это исключало бы списки, такие как '[0.0, 0.0, 0.0]', которые должны храниться. – iCodez

0
for lst in a: 
if all(x is None for x in lst): 
    pass 
else: 
    b.append(lst) 
1

Вы можете использовать это:

b = [i for i in a if i.count(None) != len(i)] 
0

Похоже, ваши подсписков будет либо списки None значений или списки значений float. Это означает, что вы можете использовать простой list comprehension фильтровать список a, проверяя, если первый элемент каждого списка None:

>>> a = [[None, None, None], 
...  [None, None, None], 
...  [40.069, 18.642, 1.0], 
...  [41.18, 19.467, 1.0], 
...  [None, None, None]] 
>>> b = [x for x in a if x[0] is not None] 
>>> b 
[[40.069, 18.642, 1.0], [41.18, 19.467, 1.0]] 
>>> 
1

Следующими делает именно то, что вы сказали, что вы хотели (в том числе сохранения любого подсписка, который не был все None, даже если вы не показали один, как в том, что ваши данные выборки):

a = [[None, None, None], 
    [None, None, None], 
    [40.069, 18.642, 1.0], 
    [41.18, 19.467, 1.0], 
    [None, None, None], 
    [42.13, None, 1.5]] # added mixed case 

b = [] 
for sublist in a: 
    cleaned = [elem for elem in sublist if elem is not None] 
    if len(cleaned): # anything left? 
     b.append(cleaned) 

print(b) 

Выход:

[[40.069, 18.642, 1.0], 
[41.18, 19.467, 1.0], 
[42.13, 1.5]] 
Смежные вопросы