Python - 计算项目的出现次数,循环遍历未排序的数组

时间:2018-03-24 03:35:09

标签: python arrays list loops counter

我很难创建一个循环来计算数组中某个单词的出现次数,并且当循环遍历所述数组时会生成另一个具有该单词当前出现次数的循环。我能够使用集合计数器()获得单个单词的总出现次数,但我不一定需要知道我需要增量的总数。

我尝试使用counter()生成的字典并循环回数组,但是生成的数组占了一半,但原始输出的顺序消失了。

LOOP

for key, value in cnt.most_common():
    x = value
    y = 0
    for index, word in enumerate(reversed(outputList)):
        if key == word:
            if x > 0:
                outputFontSizeList.append(word + str(x-y))
                if y <= x:
                    y += 1
                else:
                    y = 0

输出

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

如果我有像

这样的列表,那么想要的结果将在下面详述
['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] 

4 个答案:

答案 0 :(得分:1)

我建议您只需计算,而不是使用collections.Counter。使用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)

答案 1 :(得分:1)

您可以使用Pandas轻松完成此任务:

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]

答案 2 :(得分:0)

def get_occurences( input ):
    output = []
    occurences_dict = {}

    for word in input:
        if word in occurences_dict:
            occurences_dict[ word ] += 1
        else:
            occurences_dict[ word ] = 1
        output.append( occurences_dict[ word ] )
    return output

以:

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

print( get_occurences( input ) )

给出 [1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 3, 2, 3, 4, 3]

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

答案 3 :(得分:0)

更新了我的回答

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)