Разбить строку на элементы списка на основе ключевых слов

Я пытаюсь создать функцию (на Python), которая принимает ввод (химическую формулу ) и разбивается на список. Например, если ввод был «HC2H3O2», он превратил бы его в:

molecule_list = ['H', 1, 'C', 2, 'H', 3, 'O', 2]

Пока это работает хорошо, но если я введу элемент с двумя буквами в нем, например, натрий (Na), он разделит его. в:

['N', 'a']

Я ищу способ, чтобы моя функция просматривала строку в поисках ключей, найденных в словаре, называемом элементами. Я также рассматриваю возможность использования регулярных выражений для этого, но я не уверен, как это реализовать. Вот какова моя функция прямо сейчас:

def split_molecule(inputted_molecule):
    """Take the input and split it into a list
    eg: C02 => ['C', 1, 'O', 2]
    """
    # step 1: convert inputted_molecule to a list
    # step 2a: if there are two periodic elements next to each other, insert a '1'
    # step 2b: if the last element is an element, append a '1'
    # step 3: convert all numbers in list to ints

    # step 1:
    # problem: it splits Na into 'N', 'a'
    # it needs to split by periodic elements
    molecule_list = list(inputted_molecule)

    # because at most, the list can double when "1" is inserted
    max_length_of_molecule_list = 2*len(molecule_list)
    # step 2a:
    for i in range(0, max_length_of_molecule_list):
        try:
            if (molecule_list[i] in elements) and (molecule_list[i+1] in elements):
                molecule_list.insert(i+1, "1")
        except IndexError:
            break
    # step2b:     
    if (molecule_list[-1] in elements):
        molecule_list.append("1")

    # step 3:
    for i in range(0, len(molecule_list)):
        if molecule_list[i].isdigit():
            molecule_list[i] = int(molecule_list[i])

    return molecule_list
6
задан ohblahitsme 20 March 2012 в 07:27
поделиться