如何统计整数匹配次数分布?现有Python代码问题求解
问题分析与解决方案
首先,咱们来拆解下你遇到的核心问题:
- 你的
searchAlgorithm函数目前只是打印每个子数组的匹配次数,但没有返回这些值——这就导致你尝试判断searchAlgorithm(a, b) == 2时,实际是在和None(无返回值函数的默认返回值)做比较,自然永远不成立,统计结果只能是0。 - 函数里的
else: x == 0是个双重错误:一是这行代码只是做了个无效的比较,根本没修改x的值;二是逻辑本身就不对——我们要统计的是目标列表中所有在子数组里的元素数量,不是只要有一个元素不匹配就把计数清零。
第一步:修正searchAlgorithm函数
我们需要让函数正确统计每个子数组的匹配次数,并且返回这些次数的列表(而不是仅打印):
def searchAlgorithm(target, array): match_counts = [] # 存储每个子数组的匹配次数 for sublist in array: # 直接遍历子数组,比用索引更直观 count = 0 for num in target: if num in sublist: count += 1 match_counts.append(count) return match_counts # 返回所有匹配次数的列表 a = [8, 12, 14, 26, 27, 28] b = [[4, 12, 17, 26, 30, 45], [8, 12, 19, 24, 33, 47], [3, 10, 14, 31, 39, 41], [4, 12, 14, 26, 30, 45]] # 调用函数获取结果 result = searchAlgorithm(a, b) print("每个子数组的匹配次数:", result) # 输出:[2, 2, 1, 3],和你描述的一致
第二步:统计1、2、3的出现次数
现在有了匹配次数的列表,直接用列表的count()方法就能轻松统计指定数字的出现次数:
# 统计各次数的出现频次 count_1 = result.count(1) count_2 = result.count(2) count_3 = result.count(3) print(f"匹配次数为1的出现次数:{count_1}") # 输出:1 print(f"匹配次数为2的出现次数:{count_2}") # 输出:2 print(f"匹配次数为3的出现次数:{count_3}") # 输出:1
补充说明:原代码的问题根源
- 无返回值导致你无法捕获函数的计算结果,只能拿到
None,这是统计失败的直接原因。 - 原函数里的
else分支逻辑完全错误,如果改成x = 0,会导致只要有一个目标元素不在子数组里,计数就被清零,根本无法得到你想要的2、2、1、3结果。
这样修改后,就能完美实现你需要的两项统计功能啦!
内容的提问来源于stack exchange,提问作者MacGenius
相关产品推荐
相关产品推荐

