【问题标题】:Python: a fast way to remove subsets of lists in a list of listsPython:一种快速删除列表中列表子集的方法
【发布时间】:2013-06-05 01:42:08
【问题描述】:

例如

[[712, -743, 741, 698], [673, 688, 712, -743, 741, 698], [688, 712, -743], [743, -712, -688]]

[712, -743, 741, 698][688, 712, -743][673, 688, 712, -743, 741, 698] 的一部分,因此我们删除前 2 个并仅保留 [[673, 688, 712, -743, 741, 698]]

他们都是 int 我想知道检查所有列表并将其过滤掉的最快方法是什么 我正在考虑检查列表中所有元素的绝对值[688, 712, -743]e,如果它们都在另一个列表中,然后将其删除。还要删除一个方向相反且相差一个 -1

如果清楚请告诉我

【问题讨论】:

  • 所以你想获取一个列表并返回一个包含所有值的列表,而不是重复的,在整个列表中?
  • 返回一个不属于另一个列表的列表。这是一个简单的例子。真正的列表有更多的其他列表
  • 你能举几个例子吗,因为你举的例子可以有多种解释,而且你的措辞不清楚
  • 假设所有字母都是 int 类型 '[[a,b,c,e,f],[a,b],[c,e],[g,h,k,l, q],[g,h,k],[h,k,l,q]]' 返回 [[a,b,c,e,f],[g,h,k,l,q]]]跨度>
  • 编辑标题以更好地描述问题。

标签: python list merge duplicates


【解决方案1】:
def simplify(l):
    i = 0
    while i < len(l):
        s = set(map(abs,l[i]))
        for x in xrange(len(l)):
            if x == i: continue
            if s <= set(map(abs,l[x])):
                l.pop(i)
                i -= 1
                break
        i += 1

这将删除作为二维列表中另一个列表子集的任何列表。 (集合

【讨论】:

  • 非常感谢....如果我想简单地 [[698, -653, 655], [-655, 653, -698]] 到 [698, -653 , 655] 或 [-655, 653, -698].. 就像它们仅相差 -1 和反向?我在考虑 if 语句中的一些条件
  • @user2388058 您应该在原始问题中包含所有信息
  • 这里,我只是取了每个条目的绝对值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
相关资源
最近更新 更多