如何实现统计多列表元素出现次数的函数?当前代码返回空字典
问题:统计多列表元素出现次数却返回空字典
你的代码存在两个核心问题,导致返回空字典:
- 完全未使用传入的列表参数:函数
uniqueOccurrence接收了item1, item2, item3三个列表参数,但代码里根本没处理这些数据,反而去遍历一个刚初始化的空字典d——空字典没有任何元素,循环体直接跳过,自然不会生成统计结果。 - 统计逻辑的遍历对象错误:即使你想统计元素,也应该遍历需要统计的列表元素,而不是空字典本身。
修正方案1:合并列表后遍历统计
把三个输入列表合并成一个大列表,再逐个元素统计出现次数:
def uniqueOccurrence(item1, item2, item3): d = {} # 合并所有传入的列表 all_elements = item1 + item2 + item3 for elem in all_elements: if elem in d: d[elem] += 1 else: d[elem] = 1 return d def main(): list1 = [1] list2 = [1,2] list3 = [1,2,3] print(uniqueOccurrence(list1, list2, list3)) # 输出: {1: 3, 2: 2, 3: 1} if __name__ == "__main__": main()
修正方案2:逐个遍历列表+简化统计逻辑
用dict.get()方法简化判断逻辑,同时逐个处理每个输入列表:
def uniqueOccurrence(item1, item2, item3): d = {} # 遍历每个输入列表 for lst in [item1, item2, item3]: for elem in lst: # 若元素不存在则默认返回0,加1后赋值 d[elem] = d.get(elem, 0) + 1 return d def main(): list1 = [1] list2 = [1,2] list3 = [1,2,3] print(uniqueOccurrence(list1, list2, list3)) # 输出: {1: 3, 2: 2, 3: 1} if __name__ == "__main__": main()
修正方案3:用标准库collections.Counter快速实现
Python标准库的Counter专门用于统计元素出现次数,代码更简洁高效:
from collections import Counter def uniqueOccurrence(item1, item2, item3): # 合并列表后用Counter统计,再转成普通字典 return dict(Counter(item1 + item2 + item3)) def main(): list1 = [1] list2 = [1,2] list3 = [1,2,3] print(uniqueOccurrence(list1, list2, list3)) # 输出: {1: 3, 2: 2, 3: 1} if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者han
相关产品推荐
相关产品推荐

