You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表左移函数修复:仅移除开头目标值并保留中间值

修复自定义列表lstrip方法的问题

需求说明

需要实现一个类似list.lstrip(target_value, fill_value)的Python列表方法,满足以下要求:

  • 仅当列表开头存在目标值时,将元素左移
  • 保留列表中间的目标值
  • 末尾用指定值填充空缺

示例列表

list1 = ['N/A', 'a', 'b', 'c']
list2 = [None, None, 'd', None, 'e']

现有问题代码

原实现会移除所有目标值,无法保留列表中间的目标值:

def lstrip(a_list, target_value=None, fill_value='Invalid'):
    if a_list[0] != target_value:
        return a_list
    else:
        result = []
        for element in a_list:
            if element != target_value:
                result.append(element)
        return result + [fill_value]*(len(a_list) - len(result))

当前输出

print(lstrip(list1, 'N/A'))
['a', 'b', 'c', 'Invalid']

print(lstrip(list2))
['d', 'e', 'Invalid', 'Invalid', 'Invalid']

期望输出

对于list2,期望输出为:['d', None, 'e', 'Invalid', 'Invalid']

修复后的代码

def lstrip(a_list, target_value=None, fill_value='Invalid'):
    # 处理空列表的边界情况
    if not a_list:
        return a_list
    
    # 定位开头连续目标值的结束位置
    start_idx = 0
    while start_idx < len(a_list) and a_list[start_idx] == target_value:
        start_idx += 1
    
    # 若开头无目标值,返回原列表的副本(避免修改原列表)
    if start_idx == 0:
        return a_list.copy()
    
    # 截取非开头目标值的部分,填充至原列表长度
    stripped_elements = a_list[start_idx:]
    fill_num = len(a_list) - len(stripped_elements)
    return stripped_elements + [fill_value] * fill_num

代码说明

  1. 新增空列表判断,避免索引越界
  2. 通过循环仅定位开头连续的目标值,不会影响列表中间的目标值
  3. 截取第一个非目标值开始的子列表,保证中间元素完整保留
  4. 计算需要填充的元素数量,将指定值补充至原列表长度

内容的提问来源于stack exchange,提问作者VERBOSE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:52:14