Python - How to convert only numbers in a mixed list into float?

You could create a simple utility function that either converts the given value to a float if possible, or returns it as is:

def maybe_float(s):
    try:
        return float(s)
    except (ValueError, TypeError):
        return s

orig_list = ['data', '18', '17', '0']
the_list = [maybe_float(v) for v in orig_list]

And please don't use names of builtin functions and types such as list etc. as variable names.


Since your data actually has structure instead of being a truly mixed list of strings and numbers, it seems a 4-tuple of (str, float, float, float) is more apt:

data_conv = (data_l[0], *(float(v) for v in data_l[1:]))

or in older Python versions

# You could also just convert each float separately since there are so few
data_conv = tuple([data_l[0]] + [float(v) for v in data_l[1:]]) 

You can use the str.isdigit method and a list comprehension:

list = [int(s) if s.isdigit() else s for s in list]

Here you have a live example


Universal approach:

def validate_number(s):
    try:
        return float(s)
    except (ValueError, TypeError):
        return s

data = [validate_number(s) for s in data]

In case the structure is fixed:

data = [s if i == 0 else float(s) for i, s in enumerate(data)]

Another one:

data = [data[0]] + [float(s) for s in data[1:]]

isdigit would work in case of positive integers:

data = [int(s) if s.isdigit() else s for s in data]