簡體   English   中英

Python:化學元素計數器

[英]Python: chemical elements counter

我想獲取給定混合物的元素。 例如,對於由字典給出的空氣(O2 和 N2)和己烷(C6H14)的混合物及其各自的摩爾數

mix = {'O2': 1, 'N2': 3.76, 'C6H14': 0.01}

我想得到以下內容:

{O: 2, N: 7.52, C:0.06, H: 0.14}

另一個例子:

mix = {'C6H14': 1, 'C9H20': 1}

必須屈服

{H: 34, C: 15}
enter code here

dict 的順序並不重要。 我正在嘗試 re.split,但沒有任何進展。 如果有人可以幫助我,我將不勝感激。

編輯:嗨,也許我的問題不清楚,但我想要的是計算混合物中的原子數。 我嘗試使用正則表達式庫中的 re.findall。 我試圖將數字與其他字符分開。 例子:

mix  = {'C6H14': 1, 'C9H20': 1}
atmix = []
mix = {'O2': 1, 'N2': 3.76, 'C6H14': 0.01}
for x in mix.keys():
    tmp = re.findall(r'[A-Za-z]+|\d+', x)
    tmp = list(zip(tmp[0::2], tmp[1::2]))
    atmix.append(tmp)

知道我有:

>>> atmix
[(['O'], ['2']), (['N'], ['2']), (['C', 'H'], ['6', '14'])]

這是一個包含物質元組及其原子數的列表。 從這里開始,我需要獲取每種物質並與原子數乘以混合字典給出的摩爾數相關聯,但我不知道如何。 我試圖從混合物中分離物質及其原子的方式似乎很愚蠢。 我需要一種更好的方法來對這些物質及其原子進行分類,並發現如何將其與摩爾數聯系起來。

預先感謝

您可以迭代mix字典,同時使用精心設計的正則表達式將每個元素與其計數分開。

import re
from collections import defaultdict

mix = {'O2': 1, 'N2': 3.76, 'C6H14': 0.01}
out = defaultdict(float)
regex = re.compile(r'([A-Z]+?)(\d+)?')

for formula, value in mix.items():
    for element, count in regex.findall(formula):
        count = int(count) if count else 1  # supporting elements with no count,
                                            # eg. O in H2O
        out[element] += count * value

print(out)

產出

defaultdict(<class 'float'>, {'O': 2.0, 'N': 7.52, 'C': 0.06, 'H': 0.14})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM