2016-10-25 19 views
1

だから私は、そのようにリストの要素が1つのリストの要素をループを持つ他のリストの要素と同じにするにはどうすればよいですか?

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。 これで始める方法もわかりません。

+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に掲載されており、2番目の解決策は何の役にも立ちません。名前と質量の両方を無意味に手動で供給する必要があります。これはprint( "H"、 " 、 "1.00794")ははるかに簡単ではるかに少ない冗長ですか? – tinySandy

+0

私は彼が何を探しているのかよくわからなかったので、私は代替案を提示しました。 dictの例をまだ見つけていないことに対する謝罪。そして、後で計算をしたかったので、要素データを持つクラスが、要素にもっと多くのデータ/メソッドを格納することを将来証明できるかもしれないと考えました。 – Carl

+0

私は最初の例については気にしませんが、2番目のものを改善してよりよく見えるようにして、手作業による介入なしに問題を解決できます。私はこの部分が好きですが、 "{0.Name} = {0.Mass}"を返す。format(self) – tinySandy

2

それはあなたのために働く場合は、辞書を作成することができます。

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

それとも、文字列のリストとしてそれをしたい場合:

dict(zip(elements, molarMass)) 

をそれはあなたの結果をあげます

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

または1つの文字列内:

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

は、あなたの更新の後、それはこのように辞書を使用するように簡単です:

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

結果:他の答えが示唆するようにあなたがそれから辞書を構築することができるのいずれか、またはあなたが使用できる

1.00794 
1

2番目のリストに対して結果のインデックスを使用します。

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 
関連する問題