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