Python—在一个未排序的数组中循环时计算项的出现次数

Python—在一个未排序的数组中循环时计算项的出现次数,python,arrays,list,loops,counter,Python,Arrays,List,Loops,Counter,我很难做一个循环来计算数组中某个单词的出现次数,当在所述数组中循环时,我会用该单词的当前出现次数做另一个循环。我可以使用collections counter()获得单个单词的总出现次数,但我不一定需要知道我需要的总数 我曾尝试使用counter()生成的字典,并在数组中循环,但这会生成一个数组,该数组完成了一半的工作,但原始输出的顺序消失了 环路 想要的结果是下面详细列出的,如果我有类似的列表的话 ['cat','dog','neck','book','neck','bottle','appl

我很难做一个循环来计算数组中某个单词的出现次数,当在所述数组中循环时,我会用该单词的当前出现次数做另一个循环。我可以使用collections counter()获得单个单词的总出现次数,但我不一定需要知道我需要的总数

我曾尝试使用counter()生成的字典,并在数组中循环,但这会生成一个数组,该数组完成了一半的工作,但原始输出的顺序消失了

环路

想要的结果是下面详细列出的,如果我有类似的列表的话

['cat','dog','neck','book','neck','bottle','apple','orange','cat','dog','cat','apple','neck','cat','dog']
在循环之后,我会有一个数组,该数组中有这样的计数器,对应于与另一个数组匹配的所述单词的当前出现次数

[1,1,1,1,2,1,1,1,2,2,3,2,3,4,3] 
运行时使用:

input = [
    "cat",
    "dog",
    "neck",
    "book",
    "neck",
    "bottle",
    "apple",
    "orange",
    "cat",
    "dog",
    "cat",
    "apple",
    "neck",
    "cat",
    "dog"
]

print( get_occurences( input ) )
给予
[1,1,1,2,1,1,1,2,2,3,2,3,4,3]


基本上,使用字典记录遇到的每个单词的运行计数,并将其附加到输出数组中。如果您需要每个单词的总计数,请同时返回使用的词典。

我建议您在浏览时只进行计数,而不是使用
集合。计数器
。使用
collections.defaultdict(int)
可能会有所帮助:

import collections
arr = ['cat','dog','neck','book','neck','bottle','apple','orange','cat','dog','cat','apple','neck','cat','dog']
c = collections.defaultdict(int)
output = []
for word in arr:
    c[word] += 1
    output.append(c[word])
print(output)
更新了我的答案

class my_cnt:

def __init__(self):
    self.data = dict()

def count(self, val):
    if not val in self.data.keys():
        self.data.update({val : 1})
    else: 
        self.data[val] = self.data[val] + 1

    return self.data[val]

lst = ['cat','dog','neck','book','neck','bottle','apple','orange','cat','dog','cat','apple','neck','cat','dog']
cnt = my_cnt()

output = [cnt.count(e) for e in lst]
print(output)

你可以很容易地用熊猫做到这一点:

import pandas as pd
l = ['cat','dog','neck','book','neck','bottle','apple','orange','cat','dog','cat','apple','neck','cat','dog']
s = pd.Series(l)
s.groupby(s).cumcount().add(1).tolist()
输出:

[1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 3, 2, 3, 4, 3]

你不使用
索引
,为什么要调用
枚举
?@DyZ最初我试图利用索引并应用它,但看起来我的整个方法都不正确。没有必要在标题中添加“已解决”的内容。选择最佳答案后,系统会将问题标记为已回答,并显示为绿色(在大多数平台上)。我去掉了标签。这并不是OP真正想要实现的。他想要的结果是到那一点为止发生的次数谢谢你,我真的绞尽脑汁想如何让它继续,但实际上这是一个更简单的解决方案,我认为。。。。
class my_cnt:

def __init__(self):
    self.data = dict()

def count(self, val):
    if not val in self.data.keys():
        self.data.update({val : 1})
    else: 
        self.data[val] = self.data[val] + 1

    return self.data[val]

lst = ['cat','dog','neck','book','neck','bottle','apple','orange','cat','dog','cat','apple','neck','cat','dog']
cnt = my_cnt()

output = [cnt.count(e) for e in lst]
print(output)
import pandas as pd
l = ['cat','dog','neck','book','neck','bottle','apple','orange','cat','dog','cat','apple','neck','cat','dog']
s = pd.Series(l)
s.groupby(s).cumcount().add(1).tolist()
[1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 3, 2, 3, 4, 3]