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里。 - 后续的去重操作只是剔除重复项,但这里只有一个空字符串,所以最终返回
[''],和预期的空列表不符。
修复方案
可以通过两种方式解决:
- 提前判断空输入:在函数开头先检查输入是否为空字符串,直接返回空列表
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
- 过滤无效元素:在循环中跳过空的分割项,避免添加空字符串到品牌列表
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
相关产品推荐
相关产品推荐

