python - 如何找到括号并计算化学成分中元素的百分比?
问题描述
嗨,我正在尝试从化学成分中获取每种元素的百分比。以下代码适用于正常的化学成分。
comp = "Ag20Al25La55"
re.findall('([A-Z][a-z]?)([0-9]*[.]?[0-9]*)', comp)
输出是
[('Ag', '20'), ('Al', '25'), ('La', '55')]
Bur 我怎样才能得到与括号类似的东西?
comp = "(Cu60Zr40)98Y2"
上面的代码会给
[('Cu', '60'), ('Zr', '40'), ('Y', '2')]
但正确的输出应该是
[('Cu', '58.8'), ('Zr', '39.2'), ('Y', '2')]
因为我们必须将 98 乘以 60% 才能得到 Cu 的百分比,并将 98 乘以 40% 才能得到 Zr 的百分比。
解决方案
你可以试试:
def compute(x):
y = float(x.group(2))
return ''.join([i+str(float(j)*y/100) for i,j in re.findall('([A-z]+)(\\d+[.]?\\d*)', x.group(1))])
def final(x):
cmp = re.sub('(\\(.*\\))(\\d+)', compute, x)
return re.findall('([A-Z][a-z]?)([0-9]*[.]?[0-9]*)', cmp)
final(comp)
[('Cu', '58.8'), ('Zr', '39.2'), ('Y', '2')]
免责声明:不是最好的方法
推荐阅读
- javascript - javascript 从一个对象数组拆分为 2 个匹配项和不匹配项的数组
- javascript - 上传时的arraybuffer最大大小
- excel - 如何使用 Excel 脚本将动态范围转换为表格?
- python - 计算文本列作为其他两列的 concat(字符串总和)
- safari - 在 target='_blank' 之后强制 Safari 关闭选项卡
- reactjs - ReactJS:如何将图像从前端上传到公共文件夹
- javascript - 未处理的拒绝(TypeError):在 REACT FETCH 中将循环结构转换为 JSON
- eslint - 如何使用 ESLint 配置 jsdoc 格式?
- c++ - 如何找出四个整数中最大的?
- parameters - laravel 8 中缺少 ROUTE 所需的参数