我有一个包含三个列表的嵌套,这些列表由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
答案 0 :(得分:0)
我已经使用其他帖子中有关此问题的步骤解决了这个问题(请参阅此处:Connect string value to a corresponding variable name)
我创造了另一个解决方案的小提琴,所以你可以将它与原来的小提琴进行比较,看看我做了什么。
基本上,我通过总结当前前任列表的大小和偏移值(也可以是负数以创建重叠)来添加偏移量。此总和分配给n_offset
。 .append
发生了另一个问题。
只要填写了所有列表并且您需要将更多值附加到其中一个列表,就会再次出现间隙。这是由for-loop
附加零引起的。范围是n_offset
,因为它占用了前任列表的大小,所以它只是添加了相同列表的第一个填充大小的零。这就是你必须从n_offset
中减去列表长度的原因。