如何使一个列表中的元素与具有循环的另一个列表中的元素相等?

时间:2016-10-25 01:54:23

标签: python python-3.x

所以我试图定义一个函数,以便列表中的元素

elements = ['H', 'N', 'C', 'O'] 等于同一位置的另一个列表中的元素

molarMass = [1.00794, 14.0067, 12.0107, 15.9994]

因此H = 1.00794,N = 14.0067等。

编辑: 试图定义一个函数示例: elementMolarMass(elementSymbol) 使用时看起来像这样 elementMolarMass('H') 它返回第一个列表中的相应元素,并与另一个列表中位于相同位置的元素匹配 1.00794。 不确定如何开始。

3 个答案:

答案 0 :(得分:4)

你可以用字典理解来绑定它们

    elements = ['H', 'N', 'C', 'O']
    molarMass = [1.00794, 14.0067, 12.0107, 15.9994]

    ElementToMolar = {elements[x]:molarMass[x] for x in range(len(elements))}

    for x in ElementToMolar:
        print (x, ElementToMolar[x])

Which outputs:

    O 15.9994
    H 1.00794
    N 14.0067
    C 12.0107

或者如果你想用操作抽象它并进一步使用/与数据交互,可能应该使用一个类?

elements = ['H', 'N', 'C', 'O']
molarMass = [1.00794, 14.0067, 12.0107, 15.9994]

class Element(object):
    def __init__(self, Name, Mass):
        self.Name = Name
        self.Mass = Mass

    def __str__(self):
        return "{0.Name} = {0.Mass}".format(self)

def CreateElementsFromLists(elementList, molarMassList):
    if (len(elementList) == len(molarMassList)):        
        return [Element(elementList[x], molarMassList[x]) for x in range(len(elementList))]
    else:
        print ("Lists should have equal length")

elements = CreateElementsFromLists(elements, molarMass)

for element in elements:
    print (element)

这将生成您可能使用的新元素列表。并输出:

H = 1.00794 N = 14.0067 C = 12.0107 O = 15.9994

答案 1 :(得分:2)

如果字典适用,您可以创建字典:

dict(zip(elements, molarMass))

它会给你结果:

{'H': 1.00794, 'C': 12.0107, 'O': 15.9994, 'N': 14.0067}

或者如果你想把它作为字符串列表:

["{}={}".format(elem[0], elem[1]) for elem in zip(elements, molarMass)]

或者在一个字符串中:

' '.join("{}={}".format(elem[0], elem[1]) for elem in zip(elements, molarMass))

更新后,更容易使用这样的字典:

elementMolarMass = dict(zip(elements, molarMass))
print(elementMolarMass['H'])

结果:

1.00794

答案 2 :(得分:1)

您可以像其他答案建议的那样构建一个字典,或者您可以使用效率较低的列表查找并将结果索引用于第二个列表:

def elementMolarMass(elementSymbol):
    return molarMass[elements.index(elementSymbol)]


elements.index('N')
Out[35]: 1

elements.index('C')
Out[36]: 2

elements.index('W')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-37-c3eb78ff165e> in <module>()
----> 1 elements.index('W')

ValueError: 'W' is not in list