我想从列表及其子列表中删除指定的值。这是我的代码:
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']]
有没有人能解决我输出没有指定值的列表的问题?
答案 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'])