Python: 如何判断一个列表中有多少相同的元素在彼此之后?
Python: How to determine how much same elements in a list are after each other?
对于我们的讲座,我们需要创建一个程序。
现在我们正处于需要帮助的时刻。
假设我们有以下列表:
[['W'], ['B'], ['B'], ['W'], ['B'], ['B'], ['B']]
现在,每个字母('W'、'B')都有一个特定的值
就在两个字母接连出现时,玩家将获得积分。
示例:
在上面的列表中,玩家 'W' 不会得到任何分数,但玩家 'B' 会得到 5 分。因为第二个元素和第三个元素相继得2分,第五个、第六个和第七个元素相继得3分。
我希望大家清楚我在说什么:)
那么,我如何确定彼此之后有多少个元素具有相同的值?
非常感谢!
您可以使用 itertools.groupby
迭代列表中相同元素的 "groups"。只需确定这些组的长度并相应地增加分数即可:
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
(注意:该解决方案故意不完整并使用了略有不同的输入。)
更新:作业似乎结束了;添加了完整代码。
对于我们的讲座,我们需要创建一个程序。 现在我们正处于需要帮助的时刻。
假设我们有以下列表:
[['W'], ['B'], ['B'], ['W'], ['B'], ['B'], ['B']]
现在,每个字母('W'、'B')都有一个特定的值 就在两个字母接连出现时,玩家将获得积分。 示例:
在上面的列表中,玩家 'W' 不会得到任何分数,但玩家 'B' 会得到 5 分。因为第二个元素和第三个元素相继得2分,第五个、第六个和第七个元素相继得3分。
我希望大家清楚我在说什么:)
那么,我如何确定彼此之后有多少个元素具有相同的值?
非常感谢!
您可以使用 itertools.groupby
迭代列表中相同元素的 "groups"。只需确定这些组的长度并相应地增加分数即可:
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
(注意:该解决方案故意不完整并使用了略有不同的输入。)
更新:作业似乎结束了;添加了完整代码。