嵌套列表的重叠会产生不必要的间隙
Overlap of nested lists creates unwanted gap
我有一个包含三个列表的嵌套,它们由 for 循环填充,填充由 if 条件控制。
第一次迭代后,它可能类似于以下示例:
a = [[1,2,0,0,0,0],[0,0,4,5,0,0],[0,0,0,0,6,7]]
根据条件,它们不重叠。在第二次迭代之后,新值被附加到相应的嵌套列表中。为了确保列表的长度相同,我在每个 运行.
中附加了零
只要我设置一个条件使两个列表重叠,我就会在第三次迭代后得到所需重叠的 "size" 间隙,尽管它应该直接附加到相应的列表。此外,如果我设置多个重叠(例如每次迭代),它们会加起来,例如对于三个重叠,每个重叠大小为两个,我得到六个间隙。
下面你明白我的意思了
w/o overlap w overlap (returns) w overlap (should return)
1 0 0 1 0 0 1 0 0
1 0 0 1 0 0 1 0 0
0 1 0 0 1 0 0 1 0
0 1 0 0 1 1 0 1 1
0 1 0 0 1 1 0 1 1
0 0 1 0 0 1 0 0 1
0 0 1 0 0 0 1 0 0
0 0 1 0 0 0 1 0 0
1 0 0 1 0 0
1 0 0 1 0 0
我用我正在使用的代码创建了一个 Pyfiddle here(这是我能创建的最短的代码)。它应该让您了解我正在努力实现的目标以及我到目前为止所做的事情.
此外,我已经使用这个 post 解决了这个问题,但它似乎不适用于我的问题。
编辑: 我想我已经缩小了问题范围。似乎由于重叠,相关列表正在 "pulled up" 重叠的大小,而没有通过偏移量的大小调整剩余列表的大小。所以差异由零填充。
编辑2:
我的想法是根据其前身的大小在列表填充之前添加 overlap/offset 。由于起始索引取决于前驱体的大小,因此可以使用前驱体大小和间隙的差异来计算。
基本上在父循环中 for i in range(len(data_j))
我会添加:
overlap = len(data_j[i-1]['axis'])-offset
不幸的是,在此过程中出现了另一个问题,您可以在此处找到
我已经使用其他 post 关于此问题的步骤解决了这个问题(参见此处:)
我用解决方案创建了另一个 fiddle,因此您可以将其与原始 fiddle 进行比较,看看我做了什么。
基本上我通过将当前前置列表的大小和偏移值相加(也可以是负数来创建重叠)来添加偏移量。这笔款项分配给 n_offset
。 .append
又出现了另一个问题。
一旦所有列表都填满并且您需要将更多值附加到这些列表之一,差距就会再次出现。这是由附加零的 for-loop
引起的。范围是 n_offset
并且因为它采用前导列表的大小,所以它只是添加了一定数量的零,该数量等于同一列表的第一个填充的大小。这就是为什么你必须从 n_offset
.
中减去列表的长度
我有一个包含三个列表的嵌套,它们由 for 循环填充,填充由 if 条件控制。
第一次迭代后,它可能类似于以下示例:
a = [[1,2,0,0,0,0],[0,0,4,5,0,0],[0,0,0,0,6,7]]
根据条件,它们不重叠。在第二次迭代之后,新值被附加到相应的嵌套列表中。为了确保列表的长度相同,我在每个 运行.
中附加了零只要我设置一个条件使两个列表重叠,我就会在第三次迭代后得到所需重叠的 "size" 间隙,尽管它应该直接附加到相应的列表。此外,如果我设置多个重叠(例如每次迭代),它们会加起来,例如对于三个重叠,每个重叠大小为两个,我得到六个间隙。
下面你明白我的意思了
w/o overlap w overlap (returns) w overlap (should return)
1 0 0 1 0 0 1 0 0
1 0 0 1 0 0 1 0 0
0 1 0 0 1 0 0 1 0
0 1 0 0 1 1 0 1 1
0 1 0 0 1 1 0 1 1
0 0 1 0 0 1 0 0 1
0 0 1 0 0 0 1 0 0
0 0 1 0 0 0 1 0 0
1 0 0 1 0 0
1 0 0 1 0 0
我用我正在使用的代码创建了一个 Pyfiddle here(这是我能创建的最短的代码)。它应该让您了解我正在努力实现的目标以及我到目前为止所做的事情.
此外,我已经使用这个 post 解决了这个问题,但它似乎不适用于我的问题。
编辑: 我想我已经缩小了问题范围。似乎由于重叠,相关列表正在 "pulled up" 重叠的大小,而没有通过偏移量的大小调整剩余列表的大小。所以差异由零填充。
编辑2: 我的想法是根据其前身的大小在列表填充之前添加 overlap/offset 。由于起始索引取决于前驱体的大小,因此可以使用前驱体大小和间隙的差异来计算。
基本上在父循环中 for i in range(len(data_j))
我会添加:
overlap = len(data_j[i-1]['axis'])-offset
不幸的是,在此过程中出现了另一个问题,您可以在此处找到
我已经使用其他 post 关于此问题的步骤解决了这个问题(参见此处:
我用解决方案创建了另一个 fiddle,因此您可以将其与原始 fiddle 进行比较,看看我做了什么。
基本上我通过将当前前置列表的大小和偏移值相加(也可以是负数来创建重叠)来添加偏移量。这笔款项分配给 n_offset
。 .append
又出现了另一个问题。
一旦所有列表都填满并且您需要将更多值附加到这些列表之一,差距就会再次出现。这是由附加零的 for-loop
引起的。范围是 n_offset
并且因为它采用前导列表的大小,所以它只是添加了一定数量的零,该数量等于同一列表的第一个填充的大小。这就是为什么你必须从 n_offset
.