如何根据集合匹配元素数量递增Python变量?
解决Python集合匹配计数并更新幸福值的问题
嘿,看你在捣鼓Python代码解决HackerRank的题目,想要根据集合匹配的元素数量来递增幸福值对吧?我帮你梳理下当前代码的问题,再给你可行的改进方案~
先说说你当前代码的小问题
- 输入处理不够灵活:你示例里是一行输入多个数字,但当前代码是循环逐个读取输入,这会导致如果用户直接输一行的话程序报错,体验不太好。
- 核心逻辑没完成:你已经算出了第一个子集合和主集合的匹配长度,但没把这个数值加到
myhappiness变量里;同时也没处理第二个子集合的逻辑(猜你大概率是想对第二个集合的匹配元素做减分操作,毕竟HackerRank的那道题是这个设定)。 - 变量命名有点混乱:比如
mainarray是元素个数,mainarr是数组,名字太像容易搞混,可读性可以再提升。
修正后的代码(附注释)
# 初始化幸福值变量 my_happiness = 0 # 读取主数组的元素个数和内容 n_main = int(input("Enter number of elements: ")) main_arr = list(map(int, input().split())) # 转成集合,方便后续快速查找元素 main_set = set(main_arr) # 读取子集合的元素个数 n_sub = int(input("Enter no of elements in subarray: ")) # 处理第一个加分集合 print("Enter the first set (space-separated): ") sub_set1 = set(map(int, input().split())) # 计算匹配元素数量,加到幸福值里 match_count1 = len(sub_set1.intersection(main_set)) my_happiness += match_count1 # 处理第二个减分集合(如果需求是加分,把减号改成加号就行) print("Enter the second set (space-separated): ") sub_set2 = set(map(int, input().split())) # 计算匹配元素数量,从幸福值里减去 match_count2 = len(sub_set2.intersection(main_set)) my_happiness -= match_count2 # 输出信息和结果 print(f"Main set is {main_set}") print(f"First set is {sub_set1}") print(f"Second set is {sub_set2}") print(f"Matches in first set: {match_count1}") print(f"Matches in second set: {match_count2}") print(f"Final happiness score: {my_happiness}")
代码改进说明
- 输入优化:用
input().split()读取一行多个数字,再转成整数列表,完美适配你示例里的输入方式,比循环逐个输入高效得多。 - 核心逻辑实现:直接把匹配元素的长度加到(或减去)幸福值,完全满足你“匹配n个元素就加n”的需求;如果第二个集合也是加分项,只需要把
my_happiness -= match_count2改成my_happiness += match_count2即可。 - 可读性提升:变量名更清晰,比如
my_happiness、n_main,一眼就能看懂含义。
测试你的示例输入
输入:
Enter number of elements: 5 45 78 95 25 12 Enter no of elements in subarray: 2 Enter the first set (space-separated): 45 78 Enter the second set (space-separated): 23 24
输出:
Main set is {12, 45, 78, 25, 95} First set is {45, 78} Second set is {24, 23} Matches in first set: 2 Matches in second set: 0 Final happiness score: 2
正好符合你想要的“匹配2个元素就加2”的效果~
内容的提问来源于stack exchange,提问作者user14109979
相关产品推荐
相关产品推荐

