我正在使用 python 将化学式转换为元素的比例。
例如:我有一个["Ti5Cu3", "TiCu2", "Ti2Cu3"]
作为输入列表的列表,并希望将其转换为[5/(5+3), 1/(1+2), 2/(2+3)]
.
如何获取元素标记后面的数字?我认为那个re
图书馆可能有用?以及如何使用它来解决我的问题?
我现在的解决办法是:
def formula2por(s):
if s == "Ti":
return 1
elseif s == "Cu":
return 0
else:
t = re.match(r'Ti(.*)Cu(.*)', s).groups()
# pdb.set_trace()
if t[0] is not '':
x = int(t[0])
else:
x = 1
if t[1] is not '':
y = int(t[1])
else:
y = 1
return round(x/(x+y), 4)
但是,我认为这个问题很混乱,而不是 Pythonic 方式。
谢谢。
您可以使用Ti(\d*)Cu(\d*)
捕获数字并将匹配的对象传递给替换函数;其中数字可以分别作为第一个和第二个捕获组访问:
lst = ["Ti5Cu3", "TiCu2", "Ti2Cu3"]
def div_sub(match):
x, y = match.group(1), match.group(2)
x = 1 if x == '' else int(x)
y = 1 if y == '' else int(y)
return str(x/(x+y))
import re
[float(re.sub(r"Ti(\d*)Cu(\d*)", div_sub, s)) for s in lst]
# [0.625, 0.3333333333333333, 0.4]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句