自学内容网 自学内容网

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)!