Python 带单位的数据类字符串操作
正文
今天遇到了一个问题,一个带单位的字符串数据,我们想要将其数字部分与字母部分分开对应存放,这类问题在数据操作中极为常用。比如:
lst = ['30 mW', '500 uW', '7 mW']
首先我们可以先来观察一下这个数据的特点,以数字开头,并以字母形式的单位结尾,那么我们可以先对其每个字符进行遍历。然后判断其单个字符是否为数字,直到不为数字的字符位置记录索引值,最后使用数组切片完成操作。具体代码如下:
lst = ['30 mW', '500 uW', '7 mW']
lst_number = []
lst_unit = []
for str1 in lst:
for index, i in enumerate(list(str1)):
if not i.isdigit():
lst_number.append(''.join(str1[: index]))
lst_unit.append(''.join(str1[index:]))
break
print(lst_number)
print(lst_unit)
"""
result:
['30', '500', '7']
[' mW', ' uW', ' mW']
"""
细心的小伙伴可能会发现,这里我们对 list(str1)
进行遍历而不是对 str1
字符串遍历,是因为 Python
中对列表对象的操作速度快于直接对字符串操作。
截止到这里,好像万事大吉,但是如果此处我们的单位里面显然有空格,这对于我们的最终的结果是不友好的。因此,我们需要去掉这一空格,优化后的代码如下:
lst = ['30 mW', '500 uW', '7 mW']
lst_number = []
lst_unit = []
for str1 in lst:
for index, i in enumerate(list(str1)):
if not i.isdigit():
lst_number.append(''.join(str1[: index]))
lst_unit.append(''.join(str1[index:].split()))
break
print(lst_number)
print(lst_unit)
"""
result:
['30', '500', '7']
['mW', 'uW', 'mW']
"""
仅需要在使用 .join()
函数生成字符串后使用 .split()
函数去掉空格即可。
但是做到上述程序仍然不够,比如,遇到小数数据的情况。如:
lst = ['1.0030 mW', '843.2 uW', '1.0500 mW']
lst_number = []
lst_unit = []
for str1 in lst:
for index, i in enumerate(list(str1)):
if not i.isdigit() and i != '.':
lst_number.append(''.join(str1[: index]))
lst_unit.append(''.join(str1[index:].split()))
break
print(lst_number)
print(lst_unit)
"""
result:
['1.0030', '843.2', '1.0500']
['mW', 'uW', 'mW']
"""
由于小数点字符 .
并不是数据,因此,我们需要在 if
判断语句处加入对小数点的判断。
至此,这一问题暂时告一段落。
如果大家觉得有用,就点个赞让更多的人看到吧~
原文地址:https://blog.csdn.net/u011699626/article/details/142463811
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!