我有以下列表,
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中有一种简洁的方法吗?
答案 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)
您可以使用numpy
或pandas
,但是对于这样一个简单的计算,它们会比上面提到的替代方案慢得多。
使用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