I have the following list,
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']
What I want to do is to count how many values in that list which is >= 1.3. Returning 5, which is:
'1.57397155911713'
'1.40605782943842'
'1.36037525085048'
'1.39598077584722'
'1.37823533969271'
Is there a compact way to do it in Python?
I take compactness, you mentioned in the question, as shorter code. So, I present
sum(float(num) >= 1.3 for num in mylist)
This takes advantage of the fact that, in python True
values are taken as 1 and False
as 0. So, whenever float(num) >= 1.3
evaluates to Truthy, it will be 1
and if it fails, result would be 0. So, we add all the values together to get the total number of items which are greater than or equal to 1.3
.
You can check that like this
True == 1
# True
True + True
# 2
False * 10
# 0
You can use numpy
or pandas
, though for such a simple computation they would be much slower than the alternatives mentioned above.
Using numpy,
import numpy as np
arr=np.array(mylist).astype(float)
print len(arr[arr>=1.3])
Using pandas,
import pandas as pd
s=pd.Series(mylist).astype(float)
print len(s[s>=1.3])
Alternatively,
(pd.Series(l).astype(float)>=1.3).value_counts()[True]
For performance, the fastest solution seems to be
In [51]: %timeit sum(1 for x in mylist if float(x) >= 1.3)
100000 loops, best of 3: 8.72 µs per loop
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With