举一个我需要做的非常简单的例子,我有一个二维数组:
array([[0, 4],[2, 3],[4, 1],[0, 8],[3, 2],[4, 5],[6, 1],[0, 3],[1, 7],[2, 9]])
第一列是时间,另一列是距离。具体来说就是[time, distance]
。
对于我的最终数组,我需要删除每次= 0并继续时间。这是我的最终数组应该是:
array([[0, 4],[2, 3],[4, 1],[7, 2],[8, 5],[10, 1],[11, 7],[12, 9]])
在这种特殊情况下,只删除[0, 8]
和[0, 3]
,因为它们的时间= 0。
此外,前一个[3, 2]
变为[7, 2]
,因为4+3=7
(因为之前的时间是4)。鉴于[4, 5]
,前一[8, 5]
变为4+4=8
也是如此。鉴于[6, 1]
,以前的[10, 1]
变为4+6=10
同样如此。
相同的前一个[1, 7]
变为[11, 7]
,因为10+1=11
(因为之前的时间是10)。
鉴于[2, 9]
。
[12, 9]
变为10+2=12
也是如此
我只是放了一小块数组,因此我需要一个Python代码来完成我刚刚解释的内容。
答案 0 :(得分:1)
我想出了这个简短的代码而没有使用任何外部库:
array = [[0, 4],[2, 3],[4, 1],[0, 8],[3, 2],[4, 5],[6, 1],[0, 3],[1, 7],[2, 9]]
temp = 0
out = [array[0]]
for i in range(1,len(array)):
if array[i][0] != 0:
array[i][0] += temp
out.append(array[i])
else:
temp = array[i-1][0]
print(out)
产生:
[out]: [[0, 4], [2, 3], [4, 1], [7, 2], [8, 5], [10, 1], [11, 7], [12, 9]]
答案 1 :(得分:1)
对@MansourZayer来说,这个方法稍微快一些但几乎完全相同。通常首选迭代列表中的项目而不是使用range()
并索引到列表中,例如
In []:
x = [[0, 4],[2, 3],[4, 1],[0, 8],[3, 2],[4, 5],[6, 1],[0, 3],[1, 7],[2, 9]]
t0 = tminus = 0
r = [x[0]]
for t, d in x:
if t == 0:
t0 += tminus
continue
tminus = t
r.append([t+t0, d])
r
Out[]:
[[0, 4], [2, 3], [4, 1], [7, 2], [8, 5], [10, 1], [11, 7], [12, 9]]