Python 删除列表列表中包含常用项的较小列表

Python 删除列表列表中包含常用项的较小列表,python,list,Python,List,我有这样一个列表: [[1,2],[2,4,6],[6,9],[9,10,11],[11,20],[20,25,30] 我想从这个列表中删除包含相同项目的较小列表。例如,上述列表的结果应为: [[2,4,6],[9,10,11],[20,25,30] 由于[1,2]和[2,4,6]具有公共项2,并且 len([2,4,6])>len([1,2]) 我想不出一种没有可怕的嵌套for循环的方法来实现这一点。谢谢 您可以这样做: data = [[1, 2], [2, 4, 6], [6, 9], [

我有这样一个列表:

[[1,2],[2,4,6],[6,9],[9,10,11],[11,20],[20,25,30]

我想从这个列表中删除包含相同项目的较小列表。例如,上述列表的结果应为:

[[2,4,6],[9,10,11],[20,25,30]

由于
[1,2]
[2,4,6]
具有公共项
2
,并且

len([2,4,6])>len([1,2])


我想不出一种没有可怕的嵌套for循环的方法来实现这一点。谢谢

您可以这样做:

data = [[1, 2], [2, 4, 6], [6, 9], [9, 10, 11], [11, 20], [20, 25, 30]]

result = []
for e in sorted(data, key=len, reverse=True):
    if not any(set(e).intersection(prev) for prev in result):
        result.append(e)

print(result)
输出

[[2, 4, 6], [9, 10, 11], [20, 25, 30]]

你可以这样做:

data = [[1, 2], [2, 4, 6], [6, 9], [9, 10, 11], [11, 20], [20, 25, 30]]

result = []
for e in sorted(data, key=len, reverse=True):
    if not any(set(e).intersection(prev) for prev in result):
        result.append(e)

print(result)
输出

[[2, 4, 6], [9, 10, 11], [20, 25, 30]]

我建议首先编写可怕的嵌套for循环,然后在获得所需功能后进行优化。“过早优化是万恶之源。”1在转换后不在最终列表中,可以吗?@JacobIRR确实是一个很有价值的建议。@DYZ是的,如果1也在列表中,这会有所帮助,但我可以通过一些小技巧来解决。那么你的问题就不清楚了。为什么可以删除1而不是2、6或9?有什么不同?我建议先编写可怕的嵌套for循环,然后在获得所需功能后进行优化。“过早优化是万恶之源。”1在转换后不在最终列表中,可以吗?@JacobIRR确实是一个很有价值的建议。@DYZ是的,如果1也在列表中,这会有所帮助,但我可以通过一些小技巧来解决。那么你的问题就不清楚了。为什么可以删除1而不是2、6或9?有什么不同?