CodeWars找奇数次出现整数题解中return后[0]的作用疑问
问题解答
首先看这段代码里的列表推导式:[x for x in seq if seq.count(x) % 2],它会遍历数组里的每个元素,筛选出出现次数为奇数的元素,把这些元素全部放进一个新列表里。
题目明确说了数组里仅有一个整数出现奇数次,但要注意:这个整数在原数组里可能出现多次(比如3次、5次),所以筛选出来的列表会是[目标数, 目标数, ..., 目标数](重复次数等于它在原数组里的出现次数)。
末尾的[0]就是取这个列表的第一个元素——因为列表里所有元素都是同一个目标数,取第一个就能得到我们要找的结果。
为什么换成[1]会部分测试通过?
- 如果目标数在原数组里出现的次数≥2(比如3次),筛选后的列表长度≥2,
[1]能取到列表里的第二个元素,而这个元素和第一个是同一个数,返回结果正确,测试用例通过。 - 如果目标数在原数组里只出现1次(比如测试用例是
[5]),筛选后的列表长度是1,根本没有索引为1的元素,代码会抛出IndexError,测试用例直接失败。
这就是你看到“部分通过、部分不通过”的核心原因——完全取决于目标数在原数组里的出现次数是否≥2。
内容的提问来源于stack exchange,提问作者rinie
相关产品推荐
相关产品推荐

