从列表及其子列表中删除值

时间:2014-10-19 19:43:00

标签: python list python-3.x sublist

我想从列表及其子列表中删除指定的值。这是我的代码:

example = [['x', 'y'], ['x', 'y'], ['x']]
value = 'x'
if value in example:
    example.remove(value)
    print(example)

在这种情况下,值'x'会出现在列表example中的每个子列表中。所以这就是我想要回归的价值:

[['y'], ['y'], []]

然而,使用我当前的方法,我得到的输出是:

[['x', 'y'], ['x', 'y'], ['x']]

有没有人能解决我输出没有指定值的列表的问题?

3 个答案:

答案 0 :(得分:1)

不是效率最高的方法,但您可以使用union获取所有唯一键,然后再将intersection再次列入原始列表,例如:

inall = set().union(*your_list).intersection(*your_list)

答案 1 :(得分:0)

这个怎么样:

>>> l = [['x', 'y', 'z'], ['x', 'z', 'y'], ['x', 'z']]
>>> [item for item in l[0] if all(item in sublist for sublist in l[1:])]
['x', 'z']

如果项目在所有子列表中,则它必须位于第一个子列表(l[0])中。因此,我们使用list comprehension

构建新列表
[item for item in l[0]]

但我们只想使用一个项目,如果该项目也在所有其他子列表中(从l[1:]开始),这意味着我们需要检查

if all(item in sublist for sublist in l[1:])

将两者结合起来就可以得到解决方案。

答案 2 :(得分:0)

l = [['x', 'y'], ['x', 'y'], ['x']]

print(set.intersection(*map(set,l)))
set(['x'])