我有如下3个数组
(Pdb) Istag
[[67, 68], [227, 228]]
(Pdb) spl
array([151, 302])
(Pdb) wspl
array([26, 52])
这些数据所代表的内容如下图所示;
黑色数字对应于上面数组中显示的数字,而红色数字显示转换后的数字(如果我将它们放入单个数字列表中)。弯曲部分保存在一个数组“spl”中,而直线部分保存在另一数组“wspl”中。曲线部分根据“Istag”分为两个范围,同时将直线部分添加到索引中。
基本上,我想要的是将这些数组索引转换为6个范围对象S1,S2,S3 ...等,范围应如下
S1: range( 67, 0, -1)
S2: range( 68, 151, 1)
S3: range(151, 177, 1)
S4: range(253, 178, -1)
S5: range(254, 328, 1)
S6: range(328, 380, 1)
有人可以阐明如何做到这一点吗?
确切的逻辑并不完全清楚(如果你有超过 2 个项目会发生什么?),但你应该能够使用一个小循环和
zip
:
Istag = [[67, 68], [227, 228]]
spl = np.array([151, 302])
wspl = np.array([26, 52])
out = []
prev_c = -1
prev_d = 0
for (a, b), c, d in zip(Istag, spl, wspl):
out.extend([range(a+prev_d, prev_c+prev_d+1, -1),
range(b+prev_d, c+prev_d),
range(c+prev_d, c+d+prev_d)])
prev_c = c
prev_d = d
输出:
[range(67, 0, -1),
range(68, 151),
range(151, 177),
range(253, 178, -1),
range(254, 328),
range(328, 380)]
注意。如果您想要实际的列表,请将上面代码中的
range(...)
替换为 list(range(...))
。