Python不用切片实现middle函数无输出问题排查
问题排查与非切片实现方案
原代码无输出的原因
你的代码存在两个关键问题:
- 条件判断逻辑错误:
k[0]!= k and k[-1] != k是拿列表的首尾元素和整个列表k做比较,这永远不成立,第一次循环就会触发else分支直接返回空列表,所以没有输出。 - 需求理解偏差:就算把条件改成
i != k[0] and i != k[-1]也不对——如果列表里有和首尾元素重复的值(比如[1,2,1]),会错误删掉中间的1,但需求只是去掉首尾两个位置的元素,不是所有和首尾值相同的元素。
非切片实现方案
要精准去掉首尾位置的元素,正确做法是遍历列表的索引范围,从第1个索引(对应第二个元素)到倒数第二个索引(对应倒数第三个元素),收集这些位置的元素:
def middle(k): # 处理空列表或长度≤2的情况,直接返回空列表 if len(k) <= 2: return [] new_number = [] # range左闭右开,所以取到len(k)-2的位置 for idx in range(1, len(k)-1): new_number.append(k[idx]) return new_number numbers = [0,1,2,3,4] print(middle(numbers)) # 输出 [1,2,3]
也可以用生成器表达式简化写法:
def middle(k): return [k[idx] for idx in range(1, len(k)-1)] if len(k) > 2 else []
内容的提问来源于stack exchange,提问作者Cool coder
相关产品推荐
相关产品推荐

