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)

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

5 2

5 ответов:

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

>>> l = [["a", "done"], ["c", "not done"]]
>>> [subl for subl in l if subl[1] != 'done']
[['c', 'not done']]
>>> 
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)

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

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

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

l = filter(lambda s: s[-1] == 'not done', l)

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

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