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

Python 如何使一个列表中的元素与具有循环的另一个列表中的元素相等?,python,python-3.x,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.0079

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

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

甚至不知道如何开始。如果字典适合你,你可以创建一个字典:

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

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

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

您可以像其他答案所建议的那样从中构建dict,也可以使用效率较低的列表查找并对第二个列表使用结果索引:

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
def elementMolarMass(elementSymbol):
return molarMass[elements.index(elementSymbol)]
元素索引('N')
Out[35]:1
元素索引('C')
Out[36]:2
元素索引('W')
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1.元素索引('W')
ValueError:“W”不在列表中

您可以像其他答案所建议的那样从中构建dict,也可以使用效率较低的列表查找,并对第二个列表使用结果索引:

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
def elementMolarMass(elementSymbol):
return molarMass[elements.index(elementSymbol)]
元素索引('N')
Out[35]:1
元素索引('C')
Out[36]:2
元素索引('W')
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1.元素索引('W')
ValueError:“W”不在列表中

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

    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

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

    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

您是在尝试实现字典、列表/元组列表还是实际变量?在我看来,字典会更理想,看看@AndrewLi,我实际上只是想做一个赋值,第一部分是使一个列表中的元素与另一个列表中的元素相等,它们已经按正确的顺序排列了。那么全局变量呢?你仍然不清楚你想要什么,为什么你需要一个函数来实现它,因为字典已经做到了这一点?您还需要什么其他功能来证明该功能的合理性?您是否试图实现字典、列表/元组列表或实际变量?在我看来,字典会更理想,看看@AndrewLi,我实际上只是想做一个赋值,第一部分是使一个列表中的元素与另一个列表中的元素相等,它们已经按正确的顺序排列了。那么全局变量呢?你仍然不清楚你想要什么,为什么你需要一个函数来实现它,因为字典已经做到了这一点?您还需要什么其他功能来证明该功能?第一个解决方案已经以更好的dict形式发布,第二个解决方案没有任何好处,您必须手动提供名称和质量,这是毫无意义的,这与打印(“H”,“=”,“1.00794”)有什么不同哪一个更容易,更不冗长?从我所能看出,他不太确定他在寻找什么,所以我提供了替代方案。抱歉没有注意到dict示例。由于他后来说他想做计算,我认为一个包含元素数据的类可能会证明他在元素上存储了更多的数据/方法。我不关心第一个示例,您可以更好地改进第二个示例,这样它看起来会很好,并且可以在不需要手动干预的情况下解决问题。虽然返回“{0.Name}={0.Mass}”,但我还是喜欢这个部分。格式(self)更新为更自治。他应该能够把答案结合起来,从中做出他需要的任何东西。无论是列表、字典、类、类列表还是任何其他组合。第一个解决方案已经以更好的dict形式发布,第二个解决方案没有任何好处,您必须手动提供名称和质量,这是毫无意义的,这与打印(“H”,“=”,“1.00794”)有什么不同哪一个更容易,更不冗长?从我所能看出,他不太确定他在寻找什么,所以我提供了替代方案。抱歉没有注意到dict示例。由于他后来说他想做计算,我认为一个包含元素数据的类可能会证明他在元素上存储了更多的数据/方法。我不关心第一个示例,您可以更好地改进第二个示例,这样它看起来会很好,并且可以在不需要手动干预的情况下解决问题。虽然返回“{0.Name}={0.Mass}”,但我还是喜欢这个部分。格式(self)更新为更自治。他应该能够把答案结合起来,从中做出他需要的任何东西。