I would use a try/except logic here, where I attempt to parse the string as an int, if it throws an exception, parse as a float, and if even that throws an exception, say that it is indeed a string like so.
def check_type(str):
try:
int(str)
print(str, 'is a integer')
except:
try:
float(str)
print(str, 'is a float')
except:
print(str, 'is a string')
Then when I execute it on your list, I will get
lst = ['3', 'random2', '5.05', '1', 'Cool phrase']
for l in lst:
check_type(l)
#3 is a integer
#random2 is a string
#5.05 is a float
#1 is a integer
#Cool phrase is a string