Python练习题2:提取列表中的所有数字,包括字符串中的数字 target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6']

方法一:使用type(eval())函数判断类型,再用try-except-else处理异常

 1 def num_trans():
 2     """使用eval()函数判断"""
 3     target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6']
 4     target_out = []
 5     for i in target:
 6         if type(i) == int or type(i) == float:
 7             target_out.append(i)
 8         else:
 9             try:
10                 type(eval(i)) == int or type(eval(i)) == float
11             except NameError:  #str会报NameError
12                 pass
13             except TypeError:  #list,dict,set会报TypeError
14                 pass
15             else:
16                 target_out.append(i)
17     return target_out
18     
19 print(num_trans())

方法二:直接用int()和float()判断,如果报错,则用try-except-else处理异常,符合条件的添加到列表中

 1 def num_trans():
 2     """使用多重try-except-else判断,缺陷是代码冗余"""
 3     target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6']
 4     target_out = []
 5     for i in target:
 6         if type(i) == int or type(i) == float:
 7             target_out.append(i)
 8         else:
 9             try:
10                 int(i)   #判断是否为int
11             except ValueError:  
12                 try:            
13                     float(i)         #判断是否为float
14                 except ValueError:   #str会报ValueError
15                     pass
16                 except TypeError:    #list,dict,set会报TypeError
17                     pass
18                 else:
19                     target_out.append(i)
20             except TypeError:   
21                 pass
22             else:
23                 target_out.append(i)
24     return target_out
25     
26 print(num_trans())

方法三:用isdigit判断是否为int,但是无法判断float,只能用float()加try-except来取float,添加到列表中

 1 def num_trans():
 2     """使用isdigit和try-except-else组合判断"""
 3     target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6']
 4     target_out = []
 5     for i in target:
 6         if type(i) == int or type(i) == float:
 7             target_out.append(i)
 8         elif i.isdigit == True:
 9             target_out.append(i)
10         else:
11             try:            
12                 float(i)         #判断是否为float
13             except ValueError:   #str会报ValueError
14                 pass
15             except TypeError:    #list,dict,set会报TypeError
16                 pass
17             else:
18                 target_out.append(i)
19     return target_out
20     
21 print(num_trans())

方法四,使用isdigit判断int,再造一个轮子(isfloat)来判断字符串是否能转为float。

 1 def isfloat(f):    #判断是否为float
 2     if f.count('.') == 1:  #判断只有一个小数点
 3         n = f.replace('.','') #去除小数点
 4         flag = n.isdigit      #判断去除小数点是否为纯数字
 5         if f[0] == '.':       #首位不能是小数点
 6             return False
 7         if f[-1] == '.':      #末位不能是小数点
 8             return False
 9         if flag:
10             return True
11     else:
12         return False
13         
14 def getNumber(data):
15     newData = []
16     for one in data:
17         cla = type(one)
18         if cla == int or cla == float:   #判断是否为int或float
19             newData.append(one)
20         elif cla == str: 
21             if one.isdigit():            #判断是否为int
22                 newData.append(one)
23             elif isfloat(one):           #判断是否为float
24                 newData.append(one)
25     return newData
26 
27 target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6']
28 print(getNumber(target))

猜你喜欢

转载自www.cnblogs.com/felixqiang/p/10217035.html
今日推荐