2015-11-16 3 views
2

У меня есть следующий список:Python: Удаление списка подменит из вложенного списка на основе элементе

l = [["a", "done"], ["c", "not done"]] 

Если второй элемент каждого подпроцесса списка «сделан» Я хочу, чтобы удалить что подсписок. Так что вывод должен быть:

l = [["c", "not done"]] 

Очевидно, что ниже не работает:

for i in range(len(l)): 
    if l[i][1] == "done": 
     l.pop(0) 

Любая помощь будет оценена !!

ответ

6

Использование list_comprehension. Это просто builts нового списка перебора подсписков, где второй элемент в каждом подсписке не будет содержать строку done

>>> l = [["a", "done"], ["c", "not done"]] 
>>> [subl for subl in l if subl[1] != 'done'] 
[['c', 'not done']] 
>>> 
1
l = [["a", "done"], ["c", "not done"]] 
print [i for i in l if i[1]!="done"] 

или использовать filter

l = [["a", "done"], ["c", "not done"]] 
print filter(lambda x:x[1]!="done",l) 
0

Примените фильтр для ваших критерии:

l = [["a", "done"], ["c", "not done"]] 
l = filter(lambda x: len(x)>=2 and x[1]!='done', l) 
0

индекс статус 1, вы проверили индекс 0

for i in range(len(l)): 
     if(l[i][1] == "done"): 
      l.pop(i) 
+0

его лучше включить небольшое пояснение в своем ответе –

+0

я скорректированный ответ ... Но для цикла в диапазоне не будет работать, потому что вы получите ошибку индекса за пределами диапазона – user1452759

0

Используйте это:

l = filter(lambda s: s[-1] == 'not done', l) 
Смежные вопросы