-2

对于我们的讲座,我们需要创建一个程序。现在我们正处于需要帮助的地步。

假设我们有以下列表:

[['W'], ['B'], ['B'], ['W'], ['B'], ['B'], ['B']]

现在,每个字母('W','B')都有一个特定的值,当两个字母相继出现时,玩家将获得积分。例子:

在上面的列表中,玩家“W”不会得到任何分数,但玩家“B”会得到 5 分。从第二个元素和第三个元素开始得 2 分,从第五个、第六个和第七个元素开始,得 3 分。

我希望很清楚我在说什么:)

那么,我如何确定彼此之后有多少元素具有相同的值?

非常感谢!

4

1 回答 1

1

您可以使用itertools.groupby迭代列表中相等元素的“组”。只需确定这些组的长度并相应地增加分数:

lst = ['W', 'B', 'B', 'W', 'B', 'B', 'B']
scores = {c: 0 for c in set(lst)}
for k, g in itertools.groupby(lst):
    n = len(list(g))
    if n > 1:
        scores[k] += n

(注意:该解决方案是故意不完整的,并且使用了稍微不同的输入。)

更新:作业似乎结束了;添加了完整的代码。

于 2017-12-14T14:58:03.257 回答