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

Python函数car_makes空输入返回['']而非[]的问题排查

问题分析与修复

原问题代码

def car_makes(all_cars: str) -> list:
    lst = all_cars.split(",")
    car_brands = []
    for i in lst:
        brand = i.split(" ")
        car_brands.append(brand[0])
        firms = list(dict.fromkeys(car_brands))
    return firms

if __name__ == '__main__':
    print(car_makes("Audi A4,Skoda Super,Skoda Octavia,BMW 530,Seat Leon,Skoda Superb,Skoda Superb,BMW x5"))
    print(car_makes(""))
 
# expected answers
# ['Audi', 'Skoda', 'BMW', 'Seat']
# []

问题根源

当传入空字符串时,代码执行逻辑出现了以下问题:

  • all_cars.split(",")处理空字符串时,返回的不是空列表,而是['']——这是Pythonstr.split()方法的特性:对空字符串调用分割方法,会返回包含一个空字符串的列表。
  • 循环遍历这个['']列表时,拿到的i是空字符串,执行i.split(" ")后得到[''],取brand[0]自然就是空字符串,被添加到car_brands里。
  • 后续的去重操作只是剔除重复项,但这里只有一个空字符串,所以最终返回[''],和预期的空列表不符。

修复方案

可以通过两种方式解决:

  1. 提前判断空输入:在函数开头先检查输入是否为空字符串,直接返回空列表
def car_makes(all_cars: str) -> list:
    if not all_cars:
        return []
    lst = all_cars.split(",")
    car_brands = []
    for i in lst:
        brand = i.split(" ")
        car_brands.append(brand[0])
    firms = list(dict.fromkeys(car_brands))
    return firms
  1. 过滤无效元素:在循环中跳过空的分割项,避免添加空字符串到品牌列表
def car_makes(all_cars: str) -> list:
    lst = all_cars.split(",")
    car_brands = []
    for i in lst:
        # 跳过空或者全是空格的项
        if not i.strip():
            continue
        brand = i.split(" ")
        car_brands.append(brand[0])
    firms = list(dict.fromkeys(car_brands))
    return firms

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:01:17