Python去除列表里除特殊的字符并运算

举温度计算的例子


一般一些数据会添加一些特殊的符号,导致获取的数据会比较难进行计算处理,此篇我利用了6种方法来简易的描述一下处理这些数据的方法
(以列表出现"℃"为例计算温度差值)

# 导入正则库
import re
tem = ['18℃', '29℃']
处理逻辑: 主要利用字符串的特性和内置功能去除,先想办法将列表转换为字符串,然后进行操作,最后进行运算
方法1:# re正则

print(abs(eval(re.sub('[^0-9-]', '', '-'.join(map(str, tem))))))

正则里^ []表示:非[内容],后面只需要写入不需要处理的运算就可以了

方法2# join

print(abs(eval('-'.join(map(str, tem)).replace('℃', ''))))

用map将列表转换为字符串,将-号以字符串的形式连接在数据之中,最后利用eval()去除(字符串属性)引号进行运算

方法3:# replace

print(int(tem[1].replace('℃', ''))-int(tem[0].replace('℃', '')))

字符串的替代,利用指定序列的元素下标来进行方法的调用,此处列表的元素为字符串类型

方法4:# split

print(int(tem[1].split('℃')[0])-int(tem[0].split('℃')[0]))
 

字符串的分割,指定元素进行分割

方法5:# strip

print(int(tem[1].strip('℃'))-int(tem[0].strip("℃")))

strip字符串的去除操作,这里去除指定字符串"℃"

方法6:# 解包法 *

print(eval("{}{}-{}{}".format(*tem[1].strip('℃'), *tem[0])))

拆解成一堆数据,这个方法比较特殊,type(*tem)是没有类型的,也就是不能强转

所用的知识点:
# eval将字符串str当成有效的表达式来求值并返回计算结果
# abs() 取绝对值
# re.sub() 把字符串中所有正则表达式的地方换成新字符串
# re.sub(pattern,repl,string,count)  
# pattern表示正则中的模式字符串
# repl: 要替换的字符串
# string:原始字符串
# count : 替换几次
# str.join()   ​​​​​​
# str.join(iterable)以字符串作为分隔符,插入到 iterable 参数迭代出来的所有字符串之间 若包含非字符串值抛出异常
# str.split()  
# split(sep=None,maxsplit=-1)以空白字符作为分割符对字符串进行分割  sep参数指定分隔符,默认是空白字符 maxsplit是最大分割次数,默认不限
# str.strip()   
# strip(chars)删除字符串前后所有空白字符 chars指定待删除字符集

总结: 各种方法都有相似之处,对于序列,无序的数据类型不可以下标使用,可以尝试转换类型,本质上均不是对原序列的修改,而是各种替换,拆解,拼接,其实在其它的一些库中如pandas里面还有一些可以转换的属性方法astype()这里不赘述了,感兴趣的还可以试试用循环写

你可能感兴趣的:(Python,python,数据库,pandas)