Python在lis中基于逆向位置的分数计算

2024-04-20 01:23:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以做到这是非常冗长,黑客代码。我在寻找如何做到这一点在一个干净的,Python的方式指针。我正在使用Python 3.5.2

我有两个有序的单词表,所以。。。。你知道吗

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

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

我想迭代ted\u word\u bag中的单词,并根据单词在ting_word_bag中的位置为每个单词分配一个值。这很简单。你知道吗

更不重要的是,我想反转这些值,因此tingèwordèbag列表中的第一个单词值5分,而列表中的最后一个单词值1分(基于5个元素的列表)

在这个例子中,ted单词包的总分是8分。5代表'word',3代表'dependency'。你知道吗

任何关于如何做到这一点简单而迅速的指针将不胜感激。你知道吗

干杯。你知道吗


Tags: 代码tree列表方式代表dependency单词word
3条回答

此代码执行此操作(假设未找到项的得分为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
ting_word_bag = ['word', 'tree', 'dependency', 'number', 'pattern']

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

鉴于以下情况:

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)

正确分配分数:

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

即使如此,最终的总数也是一样的:

>>> total
8

通过理解,您可以构建一个dict来存储每个单词的“分数”:

>>> 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),对第二个列表的每个值求和:

>>> sum(some_dict.get(i,0) for i in ted_word_bag)
8 #with a correct value of some_dict

相关问题 更多 >