Python:遍历未排序数组时统计元素的增量出现次数
解决实时增量统计单词出现次数的问题
嘿,我完全懂你的困扰——collections.Counter()确实是统计单词总出现次数的利器,但要实现遍历过程中实时记录每个单词当前累计出现次数的需求,它就不太够用了。咱来看看怎么用简单的方法搞定这个问题:
核心思路
不用先统计总数,而是在遍历原数组的同时,用一个普通字典来实时追踪每个单词的出现次数:
- 每遇到一个单词,先更新它在字典里的计数(如果是第一次出现就设为1,否则加1)
- 把更新后的计数直接添加到结果数组里
代码示例
from typing import List def generate_incremental_count_array(words: List[str]) -> List[int]: current_counts = {} result = [] for word in words: # 更新当前单词的实时计数 current_counts[word] = current_counts.get(word, 0) + 1 # 将当前计数加入结果数组 result.append(current_counts[word]) return result # 测试示例 test_words = ["apple", "banana", "apple", "orange", "banana", "apple"] print(generate_incremental_count_array(test_words)) # 输出结果: [1, 1, 2, 1, 2, 3]
为什么Counter不适用?
你之前尝试用Counter生成的字典再遍历数组,得到的只会是每个单词的总出现次数,而不是到当前位置的累计次数。比如上面测试用例里的第三个"apple",Counter会返回3,但我们需要的是它在这个位置的累计次数2——这就是两者的核心区别。
而上面的方法是边遍历边计数,每一步都记录当前的状态,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

