2016-07-22 81 views
0

比如我要检查就像两个表之间的相关系数:从列表中计算排除元素的简单方法?

r = np.corrcoef(list25, list26)[0,1] 

,但我想排除-1在从计算列表。是否有一个简单的单线程方式来做这件事,而不是制作一个新的列表副本并迭代删除所有-1等等?

+0

要过滤列表? 'filter(lambda x:x!= -1,values)' – mhoff

+0

或列表理解:'[x for x in mylist if x!= -1]' –

回答

1

有一个单线解决方案。它正在创建一个没有这些的新列表。它可以通过List Comprehension做到:

new_list = [x for x in old_list if x != -1] 

从旧列表新列表相匹配的条件就基本复制了一切。

所以,你的例子:

r = np.corrcoef([x for x in list25 if x != -1], [x for x in list26 if x != -1])[0,1] 
1

使用发电机

def greater_neg_1(items): 
    for item in items: 
     if item>-1: 
      yield item 

用法:

>>> L = [1,-1,2,3,4,-1,4] 
>>> list(greater_neg_1(L)) 
[1, 2, 3, 4, 4] 

或:

r = np.corrcoef(greater_neg_1(list25), greater_neg_1(list26))[0,1] 

不需要任何额外的内存。

1

如果你真的要删除-1从列表:

while -1 in list25: list25.remove(-1)