从Python的一个列表中删除子列表

3

我已经阅读了关于删除列表中子列表的Stack Overflow帖子Removing sublists from a list of lists,但是在将其扩展到我的数据集时,它并没有起作用。因此,我发布了一个新问题。

list1=[['A,C,D', 'Y', 'hello'],
['A,B,D', 'Y', 'hello'],
['B,C,D', 'Y', 'hello'],
['A,B,C,D', 'Y', 'hello'],
['A', 'Z', 'hello'],
['A,C', 'Z', 'hello'],
['B,C', 'Z', 'hello'],
['A,C', 'Z', 'hello'],
['A,B,C', 'Z', 'hello'],
['H,I,J,K', 'Z', 'hello'],
['H,K', 'Z', 'hello'],
['H,L', 'Z', 'hello'],
['I,J,K,L', 'Z', 'hello'],
['H,I,J,K,L', 'Z', 'hello'],
['B,C,D','Z','hi'],
['A,D,C,B','Z','hi']]

我想移除一些元素,并将期望的输出贴在下面:

**Output**
[['A,B,C,D', 'Y', 'hello'],
 ['A,B,C', 'Z', 'hello'],
 ['H,I,J,K,L', 'Z', 'hello'],
 ['A,D,C,B','Z','hi']]

我已经尝试了以下代码:
sets = [set(l) for l in lists]
new_list = [l for l,s in zip(lists, sets) if not any(s < other for other in sets)]

每个列表都是子列表。您想根据什么基础进行删除? - PySaad
是的,PySaad,我认为我们需要从输出中找出模式并将其删除。 - pc_pyr
@pc_pyr,Py问的是您想根据什么基础删除一些列表并保留一些列表。需要删除的列表具有什么特征? - Prakhar Londhe
1个回答

0

你需要通过,将子列表中的所有元素拆分,然后你就可以使用已经找到的solution:

st = [{i for e in l for i in e.split(',') } for l in list1]
[l for l, s in zip(list1, st) if not any(s < other for other in st)]

输出:

[['A,B,C,D', 'Y', 'hello'],
 ['A,B,C', 'Z', 'hello'],
 ['H,I,J,K,L', 'Z', 'hello'],
 ['A,D,C,B', 'Z', 'hi']]

谢谢@kederrac,使用模式它完美地工作了,只是请澄清一下,当我在列表中添加[['E,F,G,H','T','welcome'],['A,E,H','T','welcome']]时,除了上面的逻辑之外,我想仅选择['E,F,G,H','T','welcome']并删除['A,E,H','T','welcome']],因为'E,H'已经存在于['E,F,G,H','T','welcome']中。有办法实现吗? - pc_pyr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接