2016-08-11 68 views
0

我不知道如何不断改变列表中的第一个事件。举例来说,我将有号码列表如何删除字符串中第一次出现重复的Python?

import numpy as np 
test=np.array([np.nan,np.nan,1,1,1,np.nan,1,1]) 

这给了我的

array([ nan, nan, 1., 1., 1., nan, 1., 1.]) 

我想用一个函数来改变这

array([ nan, nan, nan, 1., 1., nan, nan, 1.]) 

从而消除了输出每次启动时的第一个实例1。

+4

你试图做什么? – depperm

回答

1

你可以做这样的事情 -

idx = np.diff(np.append(False,(test==1)).astype(int))==1 
test[idx] = np.nan 

样品试验从贴出的问题

1)样本案例 -

In [80]: test 
Out[80]: array([ nan, nan, 1., 1., 1., nan, 1., 1.]) 

In [81]: test[np.diff(np.append(False,(test==1)).astype(int))==1] = np.nan 

In [82]: test 
Out[82]: array([ nan, nan, nan, 1., 1., nan, nan, 1.]) 

2)特殊情况下有1在开始 -

In [72]: test 
Out[72]: array([ 1., 1., 0., 1., 0., 0., 1., 1., 0., 1.]) 

In [73]: test[np.diff(np.append(False,(test==1)).astype(int))==1] = np.nan 

In [74]: test 
Out[74]: array([ nan, 1., 0., nan, 0., 0., nan, 1., 0., nan]) 
+2

如果您尝试了更多一点,您可以通过直接将整个第一部分用作索引操作来进一步混淆/丑化。我叫懒! :p –

+1

@TasosPapastylianou在样品运行中完成了这个愿望;) – Divakar

+0

ahahahah,我说得太快了! :p –

1

您可以充分利用nan任何事件都是nan的事实。

import numpy as np 
test=np.array([np.nan,np.nan,1,1,1,np.nan,1,1]) 

test[1:] *= test[:-1] 
test[0] = np.nan 

print test 
# [ nan nan nan 1. 1. nan nan 1.] 
相关问题