2017-01-24 7 views
1

私はこれを行うことができますが、非常に長い、ハッキーなコードです。きれいな、pythonicの方法でこれを行う方法についてのポインタを探しています。私はPython - リスト内の逆の位置に基づいてスコアを計算する

ting_word_bag = ['word', 'tree', 'dependency', 'number', 'pattern'] 

ted_word_bag = ['dependency', 'verb', 'grammar', 'word', 'parser'] 

私はted_word_bag内の単語を反復し、それぞれに値を代入したい....私は2は、このように単語のリストを注文したのPython 3.5.2

を使用しています、上のベース単語の位置はting_word_bagです。これは簡単です。

ting_word_bagリストの最初の単語が5ポイント、リストの最後の単語が1ポイント(5つのエレメントのリストに基づいて)の値を持つように、値を逆にしたいのはあまりありません

この例では、ted_word_bagの合計スコアは8ポイントになります。 'word'では5、'dependency'では3です。

これを簡単にすばやく行う方法についてのあらゆる指針は非常に高く評価されます。

乾杯。

+1

参照[** 'enumerate' **](https://docs.python.org/2/library/functions.html#enumerate)および[**'逆'**](https://docs.python.org/2/library/functions.html#reversed) –

+2

リストの最後の単語は1の価値があります...単語あたり1文字が減少するにつれて、これは0になるはずです。'ting_word_bag'には6つの作業があります – aerokite

+0

しかし、あなたの' ting_word_bag'には6つの単語が含まれています。それは「情報」が0ポイントに値するということですか?あるいは、「言葉」は6、「依存」は4の価値があるべきですか? –

答えて

1

理解を使用して、各単語のための「スコア」を格納するための辞書を構築することができます。

>>> some_dict = {j:i for i,j in enumerate(ting_word_bag)} 
>>> some_dict 
{'information': 5, 'word': 0, 'pattern': 4, 'tree': 1, 'number': 3, 'dependency': 2} 

reversedを使用するか、別の方法は、あなたが欲しいものを得ることができます。

次に、辞書の.get(index, default-value)で、あなたはあなたの第二のリストの各値を合計:

from itertools import count 

scores = dict(zip(reversed(ting_word_bag), count(1))) 

total = sum(scores.get(i,0) for i in ted_word_bag) 

適切にスコアを割り当てる:

>>> sum(some_dict.get(i,0) for i in ted_word_bag) 
8 #with a correct value of some_dict 
0
ting_word_bag = ['word', 'tree', 'dependency', 'number', 'pattern'] 

ted_word_bag = ['dependency', 'verb', 'grammar', 'word', 'parser'] 

は次のことを考えると

>>> scores 
{'pattern': 1, 'tree': 4, 'number': 2, 'word': 5, 'dependency': 3} 
>>> total 
8 
0

逆の順序でting_word_bagを列挙するために、リスト内包表記を行います:スコアのため

points = [(i,w) for i,w in enumerate(ting_word_bag[::-1])] 

別の理解:

score = sum([x[0] for x in points if x[1] in ted_word_bag]) 
0

このコード結果の合計が同じでもようこれを行います(見つからない項目については、スコアは0と仮定します)。

ting_word_bag = ['word', 'tree', 'dependency', 'number', 'pattern'] 
ted_word_bag = ['dependency', 'verb', 'grammar', 'word', 'parser'] 

score = {x: i + 1 for i, x in enumerate(reversed(ting_word_bag))} 
values = [(score.get(x, 0), x) for x in ted_word_bag] 

print(values) 
print(sum(i[0] for i in values)) 

出力:

[(3, 'dependency'), (0, 'verb'), (0, 'grammar'), (5, 'word'), (0, 'parser')] 
8 
関連する問題