对于我们的讲座,我们需要创建一个程序。现在我们正处于需要帮助的地步。
假设我们有以下列表:
[['W'], ['B'], ['B'], ['W'], ['B'], ['B'], ['B']]
现在,每个字母('W','B')都有一个特定的值正好当两个字母相继出现后,玩家才能获得积分。例:
在上面的列表中,玩家'W'不会获得任何积分,但玩家'B'将获得5分。 2点,因为第二元素和第三元素彼此相继,并且因为第五元素,第六元素和第七元素是彼此之后的3个点。
我希望很清楚我在说什么:)
那么,我如何确定彼此之后的元素具有相同的值?
非常感谢你!
您可以使用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
(注意:解决方案是故意不完整的,使用略有不同的输入。)
更新:作业似乎结束了;添加完整代码。