python - 如何将相交的二维列表链(列表列表)合并到单个二维列表列表中
问题描述
我不得不第三次编辑这个问题并尽可能简单地呈现数据。我想最后一个似乎很难识别模式。这是我现在拥有的,它看起来更像第一个,@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
数据来看,第一个 2-D 列表通过列表与第二个相交,[0,1],[4,5]
而第三个 2-D 列表与第一个 via 相交[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)
但这并没有给出上面给出的预期合并数据,而是:[[[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]],
]