简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。
大家好,我是老表~Python知识点系列,学习了记得点赞、留言、转发,三连哦~
字符串转整数需注意
问题源自我做阿里云天池Docker练习赛时(点击查看),读取num_list.csv数据后发现列表里的每个元素是字符串,所以需要先转化为整数,然后才能进行求和和排序,提交代码时遇到下面问题:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 145 100 45 100 100 4 9 0:00:11 0:00:10 0:00:01 0 Traceback (most recent call last): File "hello_world.py", line 14, in <module> tc_list = [int(i) for i in tc_list] File "hello_world.py", line 14, in <listcomp> tc_list = [int(i) for i in tc_list] ValueError: invalid literal for int() with base 10: '' {"code":"SUCCESS","data":{"returnCode":true}}
倒数第二行是关键,意思是说''
不能被转化为整数数据。
ValueError: invalid literal for int() with base 10: ''
所以在对列表进行处理时,需要提前去掉空字符串或者非纯数字组成的字符串,处理方法如下:
# 如果确定数据为整数,可以直接用isdigit()函数 # 1、数据为整数,不带正负号 str1.isdigit() # 2、数据为整数,带正负号 if str1[0] in ['-', '+']: if str1[1:].isdigit(): return int(str1) # 3、如果为浮点型,可以写一个函数 def is_number(str1): try: float(str1) # 直接转化,为float,看报不报错 except ValueError: # 如果报错,说明不是数值类型 return False return True list1 = ['1', '2', ''] # 转化为数值类型,并去除非数值类型字符串 list2 = [float(i) for i in list1 if is_number(i)]
在Docker入门赛事中,由于知道数据表中的数据都为整数,所以可以直接这样处理:
tc_list = [int(i) for i in tc_list if i != '']