import re,ast

file_list = ['15L-0.3', '16L-0.4_redo', '15L-0', '16L-redo']
rx = re.compile(r'^(\d+)L(?:-(\d+(?:\.\d+)?))?([_-].*)?$')
array = []
for i in file_list:
    m = rx.search(i)
    if m:
    	arr = list(m.groups())
    	arr[0] = int(arr[0]) # This is an int
    	if arr[1]: # If Group 2 matched, it is either a doat or int float
    		arr[1] = ast.literal_eval(arr[1]) # Parse the second number as int or float
    	array.append([x for x in arr if x is not None]) # Remove any None values

print (array)
    	