创建一个列表,计算另一个列表中数字的连续出现次数

Anu*_*eep 0 python

我有这个清单

x = [2,3,4,2,2]
Run Code Online (Sandbox Code Playgroud)

我想创建一个相同大小的新列表,其中每个元素将代表相应数字在当前元素之前出现在原始列表中的次数的计数。例如,前 3 个元素是 2,3,4 所以,我希望新列表中的前 3 个值是 0,并且x[3]由于 2 是重复的,我希望该值是 1,x[4]它又是 2 我想要值为 2(到目前为止,在列表中遇到了数字 2 两次)。

我预期的答案是新列表 = [0,0,0,1,2]

同样对于列表,[2,3,4,2,2,3,3]我希望新列表是[0,0,0,1,2,1,2]

Mar*_*yer 6

您可以利用itertools.countcollections.defaultdict进行简单、有效的列表理解。通过将count()默认字典设置为默认值,您可以为列表中的每个唯一数字获得一个新的计数器项目,该项目在您调用next()它时递增。

from itertools import count
from collections import defaultdict

c = defaultdict(count)
x = [2,3,4,2,2]

[next(c[n]) for n in x ]
# [0, 0, 0, 1, 2]
Run Code Online (Sandbox Code Playgroud)