如何将相交的二维列表链(列表列表)合并为单个二维列表列表
How can I merge a chain of intersecting 2-D lists (list of of lists) into a single 2-D list of lists
这个问题已经是第三次编辑了,数据尽量简单。我想最后一个似乎很难识别这种模式。这是我现在拥有的,看起来更像第一个,@Andrej 提供了一个解决方案,但我无法适应我的场景。我想这将取决于他的合并条件。 original
数据是 3-D 数据,如下所示。`
original = [
[[0,1],[2,3],[4,5]],
[[0,1],[4,5]],
[[2,3]],
[[6,7],[8,9],[10,11]],
[[8,9],[6,7]],
[[6,7],[10,11]],
[[16,17],[12,13],[14,15]],
[[12,13]],
[[14,15],[16,17],[18,19]]
[[12,13],[16,17],[20,21]]
]
`
根据给定的数据,我想获得另一个 3-D merged
数据`
merged = [
[[0,1],[2,3],[4,5]],
[[6,7],[8,9],[10,11]],
[[12,13],[14,15],[16,17],[18,19],[20,21]]
]
。我需要遍历所有二维列表并将所有二维列表与常见的一维内部列表合并,同时删除任何重复的一维列表。更像是找到具有相交列表的二维列表,然后合并所有此类二维列表。根据给定的 original
数据,第一个二维列表通过列表 [0,1],[4,5]
与第二个相交,而第三个二维列表通过 [2,3]
与第一个相交。所有三个二维列表通过它们相交的一维列表一起形成一个连接链。该链应合并为所有三个二维列表的并集,即 [[0,1],[2,3],[4,5]]
。我试过下面的示例代码:
import numpy as np
original = [
[[0, 1], [2, 3], [4, 5]],
[[0, 1], [4, 5]],
[[2, 3]],
[[6, 7], [8, 9], [10, 11]],
[[8, 9], [6, 7]],
[[6, 7], [10, 11]],
[[16, 17], [12, 13], [14, 15]],
[[12, 13]],
[[14, 15], [16, 17], [18, 19]],
[[12, 13], [16, 17], [20, 21]]
]
tmp = {}
for subl in original:
for a, b in subl:
tmp.setdefault(a, set()).add(b)
merged = []
for k, v in tmp.items():
out.append([[k, i] for i in v])
print(merged)
但这并没有给出上面给出的预期 merged 数据,而是这个:[[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4]], [[1, 0], [1, 1], [1, 2]], [[2, 0], [2, 1], [2, 2], [2, 3], [2, 4]]]
。如有任何帮助,我们将不胜感激。
尝试:
original = [
[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4]],
[[0, 1], [0, 2], [0, 3], [0, 4], [0, 5]],
[[0, 2], [0, 3], [0, 5]],
[[1, 0], [1, 2], [1, 4]],
[[1, 2], [1, 3], [1, 4]],
[[1, 0], [1, 2], [1, 3], [1, 4]],
[[1, 0]],
[[1, 0], [1, 3]],
[[2, 0], [2, 1], [2, 2], [2, 3]],
[[2, 1], [2, 2], [2, 3], [2, 4]],
[[2, 2], [2, 3], [2, 4]],
[[2, 3], [2, 4]],
[[2, 4]],
]
tmp = {}
for subl in original:
for a, b in subl:
tmp.setdefault(a, set()).add(b)
out = []
for k, v in tmp.items():
out.append([[k, i] for i in v])
print(out)
打印:
[
[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5]],
[[1, 0], [1, 2], [1, 3], [1, 4]],
[[2, 0], [2, 1], [2, 2], [2, 3], [2, 4]],
]
这个问题已经是第三次编辑了,数据尽量简单。我想最后一个似乎很难识别这种模式。这是我现在拥有的,看起来更像第一个,@Andrej 提供了一个解决方案,但我无法适应我的场景。我想这将取决于他的合并条件。 original
数据是 3-D 数据,如下所示。`
original = [
[[0,1],[2,3],[4,5]],
[[0,1],[4,5]],
[[2,3]],
[[6,7],[8,9],[10,11]],
[[8,9],[6,7]],
[[6,7],[10,11]],
[[16,17],[12,13],[14,15]],
[[12,13]],
[[14,15],[16,17],[18,19]]
[[12,13],[16,17],[20,21]]
]
`
根据给定的数据,我想获得另一个 3-D merged
数据`
merged = [
[[0,1],[2,3],[4,5]],
[[6,7],[8,9],[10,11]],
[[12,13],[14,15],[16,17],[18,19],[20,21]]
]
。我需要遍历所有二维列表并将所有二维列表与常见的一维内部列表合并,同时删除任何重复的一维列表。更像是找到具有相交列表的二维列表,然后合并所有此类二维列表。根据给定的 original
数据,第一个二维列表通过列表 [0,1],[4,5]
与第二个相交,而第三个二维列表通过 [2,3]
与第一个相交。所有三个二维列表通过它们相交的一维列表一起形成一个连接链。该链应合并为所有三个二维列表的并集,即 [[0,1],[2,3],[4,5]]
。我试过下面的示例代码:
import numpy as np
original = [
[[0, 1], [2, 3], [4, 5]],
[[0, 1], [4, 5]],
[[2, 3]],
[[6, 7], [8, 9], [10, 11]],
[[8, 9], [6, 7]],
[[6, 7], [10, 11]],
[[16, 17], [12, 13], [14, 15]],
[[12, 13]],
[[14, 15], [16, 17], [18, 19]],
[[12, 13], [16, 17], [20, 21]]
]
tmp = {}
for subl in original:
for a, b in subl:
tmp.setdefault(a, set()).add(b)
merged = []
for k, v in tmp.items():
out.append([[k, i] for i in v])
print(merged)
但这并没有给出上面给出的预期 merged 数据,而是这个:[[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4]], [[1, 0], [1, 1], [1, 2]], [[2, 0], [2, 1], [2, 2], [2, 3], [2, 4]]]
。如有任何帮助,我们将不胜感激。
尝试:
original = [
[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4]],
[[0, 1], [0, 2], [0, 3], [0, 4], [0, 5]],
[[0, 2], [0, 3], [0, 5]],
[[1, 0], [1, 2], [1, 4]],
[[1, 2], [1, 3], [1, 4]],
[[1, 0], [1, 2], [1, 3], [1, 4]],
[[1, 0]],
[[1, 0], [1, 3]],
[[2, 0], [2, 1], [2, 2], [2, 3]],
[[2, 1], [2, 2], [2, 3], [2, 4]],
[[2, 2], [2, 3], [2, 4]],
[[2, 3], [2, 4]],
[[2, 4]],
]
tmp = {}
for subl in original:
for a, b in subl:
tmp.setdefault(a, set()).add(b)
out = []
for k, v in tmp.items():
out.append([[k, i] for i in v])
print(out)
打印:
[
[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5]],
[[1, 0], [1, 2], [1, 3], [1, 4]],
[[2, 0], [2, 1], [2, 2], [2, 3], [2, 4]],
]