嵌套列表的重叠会产生不必要的间隙

时间:2018-02-06 11:59:28

标签: python python-3.x list overlap overlapping

我有一个包含三个列表的嵌套,这些列表由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(这是我可以创建的最短的代码)。它应该让你知道我想要实现的目标以及到目前为止我所做的事情。 / p>

此外,我已经使用此post来包围它,但它似乎不适用于我的问题。

编辑:我想我已经缩小了问题范围。似乎由于重叠,相关列表正在被拉出"通过重叠的大小而不用偏移的大小来调整剩余列表的大小。所以区别在于零填充。

EDIT2: 我的想法是在列表填充之前添加​​重叠/偏移量,具体取决于其前身的大小。由于起始指数取决于前任的大小,因此可以使用前任大小和差距的差异来计算。

基本上在父for循环中for i in range(len(data_j))我会添加:

        overlap = len(data_j[i-1]['axis'])-offset

不幸的是,在此过程中您可以找到另一个问题Connect string value to a corresponding variable name

1 个答案:

答案 0 :(得分:0)

我已经使用其他帖子中有关此问题的步骤解决了这个问题(请参阅此处:Connect string value to a corresponding variable name

我创造了另一个解决方案的小提琴,所以你可以将它与原来的小提琴进行比较,看看我做了什么。

New Fiddle

基本上,我通过总结当前前任列表的大小和偏移值(也可以是负数以创建重叠)来添加偏移量。此总和分配给n_offset.append发生了另一个问题。

只要填写了所有列表并且您需要将更多值附加到其中一个列表,就会再次出现间隙。这是由for-loop附加零引起的。范围是n_offset,因为它占用了前任列表的大小,所以它只是添加了相同列表的第一个填充大小的零。这就是你必须从n_offset中减去列表长度的原因。