即使项目不连续使用Python,如何从长嵌套列表中删除短列表?

Posted

技术标签:

【中文标题】即使项目不连续使用Python,如何从长嵌套列表中删除短列表?【英文标题】:how to delete the short lists from a long nested list even the items are not continuous using Python? 【发布时间】:2020-10-08 01:03:30 【问题描述】:

例如:

t=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]

如果项目包含在长列表中,我想删除短列表,即使项目不连续。所以,我希望结果是:

[[1, 2, 3, 4, 5, 6],[6,7]]

我可能会自己解决这个问题,但我的方法不够聪明。有人可以帮我吗?

【问题讨论】:

每个列表中的元素是否唯一? 为什么不发布您的方式并就您遇到的具体问题寻求帮助?您是否觉得自己的方式不雅、缓慢、不可靠或其他原因? @Joonyoung Park 是的,元素很独特 @sabik,请不要认为我懒得自己做这件事。我的想法就像一个嵌套的 for 循环,将它们相互比较,为需要删除的短列表制作一个标签。我没有在这里发布它只是因为我有点认为这不是好方法而且它无济于事。 @FengChen 即使这不是最好的方法,它仍然会显示你是如何解决问题的,正是你所期望的,并允许有人告诉你如何解决它,也许还有什么更好的方法是 - 这是提出 *** 问题的最佳方式,否则您就是在要求这里的人为您编写代码 【参考方案1】:

由于列表中的所有元素都是唯一的,而且我喜欢使用集合 这是我的代码。没有检查它的效率,但它看起来更干净:D

t = [[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]

t = [set(l) for l in t]
t = [list(x) for x in t if not any([x.issubset(y) for y in t if x != y])]

【讨论】:

【参考方案2】:

从小到大排序,将它们设置为集合,然后将它们从列表中弹出,以减少每次计算的列表大小。

t=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]

t = sorted(t, key=lambda x: len(x))
t = [set(x) for x in t]
for i in range(len(t)):
    a = t.pop(0)
    if not any([a.issubset(x) for x in t]):
        print(a)

【讨论】:

【参考方案3】:

我的方法很简单

    我检查了最后一个元素是否已经出现在我们更长的列表中。如果我们展示了,那么我们不需要添加到较长的列表中,如果不是,那么我们将添加到较长的列表中
sorted_lists=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]

sorted_big_lists =[]
for sorted_list in sorted_lists:
    for test_list in sorted_big_lists:
        if sorted_list[-1] in test_list:
            break
    else:
        sorted_big_lists.append(sorted_list)
  
print(sorted_big_lists)

【讨论】:

以上是关于即使项目不连续使用Python,如何从长嵌套列表中删除短列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何改进评估列表以确定它是不是包含特定连续项目的方法?

TypeError:'int'对象不支持嵌套python列表中的项目分配[关闭]

在 python 中,如何有效地找到列表中不一定相邻的最大连续数字集?

Python:在元组列表和嵌套列表中比较并查找匹配项

你知道如何将python中嵌套的列表扁平化吗?

如何有效地删除列表列表中的连续重复项?