这个问题与我以前的帖子有某种关系。见overlap-of-nested-lists-creates-unwanted-gap
我认为我找到了一个解决方案,但我无法弄清楚如何实现它。
首先是相关代码,因为我认为以这种方式解释我的问题更容易。我准备了一个小提琴来展示代码:
每次迭代都会根据ag
填充axis
中的嵌套列表。下一次迭代应该填充ag
中的下一个嵌套列表,但取决于之前填充的列表的长度。
实现这一目标的一般想法如下:
首先,我将顶部for循环中的每个嵌套列表分配给如下变量:
x = ag[0]
y = ag[1]
z = ag[2]
为了识别我需要访问data_j
的第一个列表。我认为访问将以这种方式工作。
data_j[i-1]['axis']
data_j[i-1]['axis']
返回x
,y
或z
作为string
现在我需要获得与data_j[i-1]['axis']
返回的轴对应的列表长度。
问题是如何连接"值" data_j[i-1]['axis']
及其对应的x = ag[0]
,y = ag[1]
或z = ag[2]
由于eval()
和globals()
是不好的做法,我需要向正确的方向努力。我无法找到解决方案
修改
我想我找到了办法。我将尝试使用父循环的迭代器i
而不是绕过使用实际的轴名称(参见小提琴),因为它增加了来自data_j
的每个元素它有点创建一个id我想我可以用来创建一个方法来将它用于嵌套的索引来寻址正确的列表。
答案 0 :(得分:0)
我设法使用迭代器i
来解决它。从我原来的帖子中看到小提琴,以便理解我对以下代码所做的事情:
if i < 0:
cond = 0
else:
cond = i
pred_axis = data_j[cond]['axis']
if pred_axis == 'x':
g = 0
elif pred_axis == 'y':
g = 1
elif pred_axis == 'z':
g = 2
calc_size = len(ag[g])
n_offset = calc_size+offset
我还没想到为什么cond
必须是i
而不是i-1
,但它有效。一旦我弄清楚它背后的逻辑,我就会发布它。
编辑:它不适用于i
,适用于i-1
。相关列表的索引从1
开始。 ag[0]
保留用于常量,如果需要进一步计算,可以添加常量。因此,由于相关指数从一开始就被1
的值向上移动,因此我不需要在每次运行中减少迭代器。