You can do like this:
define your own isdigit() function which works for float and int
  both because default isdigit() only works for int :
x = [['3.14', 'Pi and radius', '20', 'False', 'False', '10'],
     ['201', 'Eulers', 'True', '9.18922', 'False', '12', '90']]
def isdigit(digit):   #define your own isdigit() function which works for float and int both because default isdigit() only works for int
    try:
        float(digit)
        return 0
    except ValueError:
        return 1
check={'True':True,'False':False}  #define True , False dict
Now :
In one line solution:
list_1=[[float(sub_item) if '.' in sub_item else int(sub_item) if isdigit(sub_item) == 0 else check.get(sub_item) if sub_item == 'True' or sub_item == 'False' else sub_item for sub_item in item]for item in x]
print(list_1)
output:
[[3.14, 'Pi and radius', 20, False, False, 10], [201, 'Eulers', True, 9.18922, False, 12, 90]]
Detailed Solution:
Above list comprehension is same as :
final_list=[]   # logic is from here
for item in x:
    if isinstance(item,list):
        sub_list=[]   
        #sub_list for keep tracking of nested list in origional list
        for sub_item in item:
            if isdigit(sub_item)==0:  #passing value to isdigit() function
                if '.' in sub_item:    #float contain '.' 
                    sub_list.append(float(sub_item))
                else:                  #else it will be int
                    sub_list.append(int(sub_item))
            elif sub_item=='True' or sub_item=='False': 
                sub_list.append(check.get(sub_item))  #get value from check dict
            else:
                sub_list.append(sub_item)  #else append remaining items
        final_list.append(sub_list)
print(final_list)
output:
[[3.14, 'Pi and radius', 20, False, False, 10], [201, 'Eulers', True, 9.18922, False, 12, 90]]