过滤列表的问题

时间:2014-03-11 14:42:26

标签: python python-2.7

我使用numpy.genfromtxt从文件中读取数组。从那里我通过做

计算了一个名为renditen的列表
renditen = array_column1 - array_column2

renditen.dtype给出float64和renditen看起来像这样: [-1.15 -3。 -5.95 ......,13.8 15. 6.5] 我的问题是重写以下代码行:

ew_trefferquote = len(renditen[renditen>0]) / len(renditen) 

我希望获得肯定列表条目的百分比。 但是,只有当我在Spyder编辑器中标记该行时才会正确执行此行 运行选定的代码。当我在Spyder中运行整个脚本时,ew_trefferquote为零,尽管它不应该是。该代码行有什么问题,还是Spyder问题?

2 个答案:

答案 0 :(得分:1)

我认为发生的事情是你将整数除以另一个整数:

>>> renditen = np.array([-2,-1,0,10,20])
>>> renditen[renditen > 0]
array([10, 20])
>>> len(renditen[renditen > 0]) / len(renditen)
0

你可以通过确保划分浮动来避免这种情况:

>>> 1.0*len(renditen[renditen > 0]) / len(renditen)
0.4
>>> float(len(renditen[renditen > 0])) / len(renditen)
0.4

或者您可以在程序开始时from __future__ import division

>>> from __future__ import division
>>> 2/3
0.6666666666666666

我无法解释为什么选择时会使用浮动除法,但后来我对Spyder一无所知。

答案 1 :(得分:0)

我认为该行应该是:

ew_trefferquote = len([x for x in renditen if x > 0]) / len(renditen) 

您目前拥有它的方式是尝试使用renditen > 0

索引到renditen