curiousguy
curiousguy

Reputation: 3262

How to know index of a decimal value in a python list

I have a list like the following

['UIS', '', '', '', '', '', '', '', '', '02/05/2014', 'N', '', '', '', '', '9:30:00', '', '', '', '', '', '', '', '', '31.8000', '', '', '', '', '', '', '3591', 'O', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '0']

Now how to know which element is decimal here , basically I want to track the 31.8000 value from the list. Is it possible ?

Upvotes: 2

Views: 1820

Answers (4)

Airmee
Airmee

Reputation: 1

data = ['UIS', '', '', '', '', '', '', '', '', '02/05/2014', 'N', '', '', '', '', '9:30:00', '', '', '', '', '', '', '', '', '31.8000', '', '', '', '', '', '', '3591', 'O', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '0']

import decimal

target = decimal.Decimal('31.8000')

def is_target(input):
    try:
        return decimal.Decimal(input) == target
    except decimal.InvalidOperation, e:
        pass

output = filter( is_target, data)
print output

Upvotes: 0

Chris Seymour
Chris Seymour

Reputation: 85875

Using a list comprehension and a regular expression match:

>>> import re
>>> [float(i) for i in x if re.match(r'^[+-]\d+?[.]\d+$',i)]
[31.8]

If you want to tracking the indexes of the floats:

>>> [x.index(i) for i in x if re.match(r'[+-]?\d+?[.]\d+',i)]
[24]

Upvotes: 0

thefourtheye
thefourtheye

Reputation: 239603

You can reliably find if a variable has a floating point number or not, by literal evaluating and checking if it is of type float, like this

from ast import literal_eval
result = []
for item in data:
    temp = ""
    try:
        temp = literal_eval(item)
    except (SyntaxError, ValueError):
        pass
    if isinstance(temp, float):
        result.append(item)
print result
# ['31.8000']

If you want to get the indexes, just enumerate the data like this

for idx, item in enumerate(data):
    ...
    ...

and while preparing the result, add the index instead of the actual element

        result.append(idx)

Upvotes: 1

Nils Werner
Nils Werner

Reputation: 36795

Iterate over the list and check if float() succeeds:

floatables = []

for i,item in enumerate(data):
    try:
        float(item)
        floatables.append(i)
    except ValueError:
        pass

print floatables

Alternatively, if you want to match the decimal format you can use

import re
decimals = []

for i,item in enumerate(data):
    if re.match("^\d+?\.\d+?$", item) is not None:
        decimals.append(i)

print decimals

Upvotes: 1

Related Questions