计算列表中满足特定条件的值

时间:2014-04-07 05:41:19

标签: python

我有以下列表,

mylist = ['0.976850566018849',
 '1.01711066941038',
 '0.95545901267938',
 '1.13665822176679',
 '1.21770587184811',
 '1.12567451365206',
 '1.18041077035567',
 '1.13799827821001',
 '1.1624485106005',
 '1.37823533969271',
 '1.39598077584722',
 '1.23844320976322',
 '1.57397155911713',
 '1.40605782943842',
 '1.36037525085048',
 '1.185',
 '1.22795283469963',
 '1.17192311574904',
 '1.04121940463022',
 '1.0133517787145',
 '0.986161470813006',
 '1.09820439504488',
 '1.06640283661947',
 '1.05764772395448',
 '1.02678616758973',
 '1.01876057166248',
 '1.09019498604372',
 '1.1665479238629',
 '1.07170094763279',
 '1.1326945725342',
 '1.18199297460235',
 '1.20353001964446',
 '1.00973941850665',
 '1.0662943967844',
 '1.04876624296406',
 '1.12447065457189',
 '0.954629674212134',
 '1.02961694279098']

我想要做的是计算该列表中有多少值> = 1.3。 返回5,即:

      '1.57397155911713' 
      '1.40605782943842'
      '1.36037525085048'
      '1.39598077584722' 
      '1.37823533969271'

在Python中有一种简洁的方法吗?

7 个答案:

答案 0 :(得分:14)

我在问题中提到的紧凑性是更短的代码。所以,我提出

sum(float(num) >= 1.3 for num in mylist)

这利用了以下事实:在python True中,值为1,False为0.因此,只要float(num) >= 1.3计算为Truthy,它就是{{1如果失败,结果将为0.因此,我们将所有值加在一起以获得大于或等于1的项目总数。

您可以像这样检查

1.3

答案 1 :(得分:6)

计算该列表中有多少值> = 1.3:

sum(1 for x in mylist if float(x) >= 1.3)

如果您需要实际提取满足条件的数字列表,只需使用列表推导创建该列表,并随意执行任何操作:

a = [x for x in mylist if float(x) >= 1.3]
print a
print len(a)

答案 2 :(得分:2)

您可以使用generator expression

  

一些简单的生成器可以简洁地编码为使用a的表达式   语法类似于列表推导但使用括号而不是   括号。这些表达式适用于以下情况   通过封闭功能立即使用发生器。 <强>发电机   表达式更紧凑但比全发电机更不通用   定义并且往往比等效列表更具内存友好性   推导。

这样的事情:

sum(1 for x in mylist if float(x) >= 1.3)

答案 3 :(得分:1)

如果您想要返回给您并存储在列表中的值,您可以这样做:

count = []
for value in mylist:
    num = float(value)
    if num >= 1.3:
        count.append(value)

如果您想要输出列表,只需添加:

print(count)

或者如果你想要更多的值的数量添加:

print(len(count))

答案 4 :(得分:1)

这是另一种选择,使用reduce()内置:

reduce(lambda x, y: x + (y >= 1.3), mylist, 0)

只是为了完整,因为我看到已经有一个公认的答案。关键是,通常有不止一种方法可以用Python(或许多其他语言)来完成某些事情......

答案 5 :(得分:0)

使用列表理解

>>> len([i for i in mylist if float(i) >= 1.3])

答案 6 :(得分:0)

您可以使用numpypandas,但是对于这样一个简单的计算,它们会比上面提到的替代方案慢得多。

使用numpy

import numpy as np
arr=np.array(mylist).astype(float)
print len(arr[arr>=1.3])

使用pandas

import pandas as pd
s=pd.Series(mylist).astype(float)
print len(s[s>=1.3])

可替换地,

(pd.Series(l).astype(float)>=1.3).value_counts()[True]

对于性能,最快的解决方案似乎是

In [51]: %timeit sum(1 for x in mylist if float(x) >= 1.3)
100000 loops, best of 3: 8.72 µs per loop