列表索引未在for循环中更新(python)

时间:2019-10-17 21:00:47

标签: python indexing

在单独的定义中,我尝试获取')'的索引,然后反向循环直到得到'('。反向语句有效,并且该语句继续停留在')'的第一个索引上。索引无法更新的原因是什么?

class elements:
    periodic_table = ['']

    def __init__(self, equation):
        self.equation = equation

    def poly(self):
        polyatomic = 'C2H3O2', 'HCO3', 'HSO4', 'ClO', 'ClO3', 'ClO2', 'OCN', 'CN', 'H2PO4', 'OH', 'NO3', 'NO2', 'ClO4', 'MnO4', 'SCN',
        return polyatomic

    def separate(self):
        element = elements.equation
        list1 = []

        for first, second in zip(element, element[1:]):
            if first == ')' and second.isdigit():
                multiply = int(second)
                print(first, second)
                print(element.index(first))
                for multiplcation in element[element.index(first)::-1]:
                    if multiplcation == '(':
                        break
                    elif multiplcation != ')':
                        final = multiplcation * multiply
                        print(final)
            if first == '=':
                list1.append(first)
            elif first.isupper() and second.islower():
                list1.append(first + second)
            elif first.isupper() and second.isdigit():
                amount = first * int(second)
                list1.append(amount)
            elif first.isupper():
                list1.append(first)


elements = elements(
    'K4Fe(CN)6 + KMnO4 + H2SO4 = KHSO4 + Fe2(SO4)3 + MnSO4 + HNO3 + CO2 + H2O')

print(elements.separate())

1 个答案:

答案 0 :(得分:0)

问题的症结在这里:

            for multiplcation in element[element.index(first)::-1]:

您是从字符串中的第一次出现RPAREN进行备份,而不是从刚刚发现的RPAREN中进行备份。在给定的示例中,您将总是返回以遍历“ CN”以获取以后的任何括号。

我建议您重新设计代码:将方程分解为分子;编写一个函数以返回每个分子的膨胀。如果您需要重新构造整个方程,请join一起使用。

那应该使您摆脱当前的问题。