Python中列表切片冒号的作用及代码计算结果差异疑问
关于HackerRank集合入门题的两个问题解答
一、array[:_+1]中冒号的作用
这是Python的切片语法,具体规则:
- 切片格式为
列表[起始索引:结束索引],会截取列表中从起始索引(包含)到结束索引(不包含)的子列表 - 当起始索引省略时,默认从列表的第一个元素(索引0)开始
- 所以
array[:_+1]就是截取array中从开头到索引_的所有元素(因为切片是左闭右开,_+1作为结束索引,实际包含到索引_的元素)。这里的_应该是循环迭代变量,指代当前遍历到的元素索引。
举个例子,假设当前_是2(对应列表第三个元素),array[:2+1]等价于array[:3],会取索引0、1、2的三个元素。
而array[:_+1].count(array[_])的作用是:统计当前元素array[_]在「从列表开头到当前位置」的子列表里的出现次数——如果次数为1,说明是该元素第一次出现,需要计入平均值;如果大于1,说明之前已经出现过,就跳过不计。
二、结果差异0.775的原因
结合你的输入示例:
n=10,arr=[161,182,161,154,176,170,167,171,170,174]
正确的目标计算(题目要求)
题目实际要求的是计算列表中所有唯一元素的平均值:
- 去重后的元素集合:{161,182,154,176,170,167,171,174}(共8个元素)
- 元素总和:161+182+154+176+170+167+171+174 = 1355
- 平均值:1355 ÷ 8 = 169.375
你的错误计算(推测)
你的代码应该是直接计算了所有元素的平均值:
- 所有元素总和:161+182+161+154+176+170+167+171+170+174 = 1686
- 平均值:1686 ÷ 10 = 168.6
差异来源
169.375 - 168.6 = 0.775,正好是你看到的差值。本质是你误解了题目要求,没有对元素去重,直接计算了全部元素的平均值。
内容的提问来源于stack exchange,提问作者lmao fgoogle
相关产品推荐
相关产品推荐

