若子列表中只有很少的元素,那个么如何从列表中删除整个子列表?python

若子列表中只有很少的元素,那个么如何从列表中删除整个子列表?python,python,python-2.7,Python,Python 2.7,我试图从列表中删除子列表,但出现以下错误: ValueError:list。删除(x):x不在列表中 我希望删除子列表,尽管x从子字符串中只有很少的元素 诸如此类: list_a=[[1,2,3],[4,5,6]] list_a.remove([1,3]) list_a [4,5,6] 根据以下评论: 我得到了产品清单: products=[['0001', 'Hummus', 'Food', 'ISR', '10-04-2015'], ['0002', 'Guinness', 'Fo

我试图从列表中删除子列表,但出现以下错误: ValueError:list。删除(x):x不在列表中

我希望删除子列表,尽管x从子字符串中只有很少的元素

诸如此类:

list_a=[[1,2,3],[4,5,6]]

list_a.remove([1,3])

list_a

[4,5,6]

根据以下评论:

我得到了产品清单:

products=[['0001', 'Hummus', 'Food', 'ISR', '10-04-2015'], ['0002', 'Guinness', 'Food', 'IRL', '11-04-2015']]
lst[0]
lst[2]
lst[3]
对于每种产品都是唯一的。我希望通过以下三个元素删除整个子列表:

>>> products.remove(['0001', 'Food', 'ISR'])
>>> products
['0002', 'Guinness', 'Food', 'IRL', '11-04-2015']

现在,实际问题已经暴露出来:

>>> products=[['0001', 'Hummus', 'Food', 'ISR', '10-04-2015'], ['0002', 'Guinness', 'Food', 'IRL', '11-04-2015']]
>>> to_remove=['0001', 'Food', 'ISR']
>>> products = [l for l in products if [l[0], l[2], l[3]] != to_remove]
>>> products
[['0002', 'Guinness', 'Food', 'IRL', '11-04-2015']]

使用包含
code
名称
类别
标签
日期
属性的
产品
食品
对象可能是一种好方法。

您可以检查
[1,3]
是否是具有以下属性的子集:

list_a = [sub for sub in list_a if not all(i in [1, 3] for i in sub)]

s、 issubset(t)这两个问题发生了什么?你是否试图得到这个结果:
[[1],[4,5,6]
?列表a=[1,2,3],[1,4,3]]的输出是什么;列表a.删除([1,3])?我不想要这两个。希望通过在子列表中包含其他元素来删除整个子字符串。可能带有数字的示例不够清楚。我将试着解释我的问题;bad=[1,4]这将返回
[]
。这就是OP想要的吗?从我收集的信息来看,是的。@sshashank124:
没有任何(cond for…
短路)以及
所有(not cond for…
(即,TigerhawkT3的答案)。不过,在我看来,这本书读起来更好,将
非任何
更改为
非全部
,你会遇到OP的更新requirements@Eric非常感谢。我没有意识到这样一个要求。不要担心-在问题的最初出现的背景下,这个答案符合要求。小问题,使用“反向”的原因是什么?如果你不使用
反向
,您在尝试遍历
列表时,最终弄乱了它。实际上,您不需要使用
反转
,只需要列表的副本。您可以对products[:]中的x使用
@SharonTarrab,python在开始迭代时具有指向列表中每个对象的指针,如果在迭代时删除元素,则最终可能会丢失元素。您可以复制列表,但使用反向方式,我们不需要在中保留另一个完整列表memory@EllaShar,这是一种更有效的方法。
>>> products=[['0001', 'Hummus', 'Food', 'ISR', '10-04-2015'], ['0002', 'Guinness', 'Food', 'IRL', '11-04-2015']]
>>> to_remove=['0001', 'Food', 'ISR']
>>> products = [l for l in products if [l[0], l[2], l[3]] != to_remove]
>>> products
[['0002', 'Guinness', 'Food', 'IRL', '11-04-2015']]
list_a = [sub for sub in list_a if not all(i in [1, 3] for i in sub)]
list_a = [[1,2,3],[4,5,6]]

rem = set([1,3])

list_a[:] = [ x for x in list_a if not rem.issubset(x)]
print(list_a)
products=[['0001', 'Hummus', 'Food', 'ISR', '10-04-2015'], ['0002', 'Guinness', 'Food', 'IRL', '11-04-2015']]

rem = set(['0001', 'Food', 'ISR'])

products[:] = [ x for x in products if not rem.issubset(x)]
print(products)
[['0002', 'Guinness', 'Food', 'IRL', '11-04-2015']]
products=[['0001', 'Hummus', 'Food', 'ISR', '10-04-2015'], ['0002', 'Guinness', 'Food', 'IRL', '11-04-2015']]

rem = set(['0001', 'Food', 'ISR'])   

for x in reversed(products):
    if rem.issubset(x):
        products.remove(x)
print(products)