2016-10-25 3 views
1

그래서 I 함수를 정의하는 것을 시도하고 있기 때문에 동일한 위치한 목록의 요소를 루프가있는 다른 목록의 요소와 동일하게 만드는 방법은 무엇입니까?

molarMass = [1.00794, 14.0067, 12.0107, 15.9994]

다른리스트 내의 요소와 동일한 목록

elements = ['H', 'N', 'C', 'O'] 요소 그래서 H = 1.00794, N = 14.0067는 등

편집

: elementMolarMass(elementSymbol) 사용할 때 볼 것이다 : 함수의 예를 정의하려고 이와 같이 elementMolarMass('H') 의 첫 번째 목록에서 해당 요소를 반환하고 같은 위치에있는 다른 목록의 요소와 일치합니다 1.00794. 어떻게 시작해야 할지도 모릅니다.

당신을 위해 작동하는 경우 당신은 사전을 만들 수 있습니다
+2

당신은, 사전을 달성하기 위해리스트/튜플 또는 실제 변수의 목록을하려고합니까? 제 의견으로는 사전이 더 최적 일 것입니다. – Li357

+1

['zip'] (https://docs.python.org/3/library/functions.html#zip)을보십시오 – niemmi

+0

@AndrewLi 저는 실제로 과제를 수행하고 첫 번째 부분은 하나의 목록에있는 요소를 다른 목록의 요소와 동일한 순서로 만드는 것입니다. – Langfao

답변

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

+0

첫 번째 해결책은 이미 더 나은 형식의 dict에 게시되었으며 두 번째 해결책은 좋지 않습니다. 이름과 질량 모두를 무의미하게 수동으로 제공해야합니다. print와는 다른 점이 무엇입니까 ("H", "=" , "1.00794") 훨씬 쉽고 훨씬 덜 장황합니까? – tinySandy

+0

그가 무엇을 찾고 있는지 확실히 알 수 없기 때문에 대안을 제시했습니다. 사전 예를 발견하지 못한 것에 대해 사과드립니다. 그리고 나중에 계산을하고 싶다고 말했기 때문에 요소 데이터가있는 클래스가 미래에 더 많은 데이터/메서드를 요소에 저장할 수 있다고 생각했습니다. – Carl

+0

첫 번째 예제에 대해 신경 쓰지 않아도되므로 두 번째 테스트를 향상시켜 수동으로 개입하지 않아도 문제가 해결 될 수 있습니다. 나는이 부분을 좋아하지만 반환 "{0.Name} = {0.Mass}". format (self) – tinySandy

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 
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 
관련 문제