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