Python列表无法追加内容,CSV筛选函数返回空列表求助
问题分析与修复方案
核心错误点
- 遍历元素引用错误:在
find_flight的循环里,你误用了mf[1]和mf[2]来获取当前航班的城市和时间,这其实是取整个筛选列表的第2、3个元素,而非当前遍历的row对应的字段。必须改成row[1]和row[2]才能正确访问每一行的数据。 - 字符串时间比较的潜在风险:直接用字符串对比时间,虽然"0000"到"2400"的字符串顺序和数值顺序一致,但如果后续时间格式变化(比如加冒号)就会出错,建议转成整数再比较更稳妥。
- 未处理CSV表头(可选):如果你的
Airport.csv带表头行,get_filtered_CSV会把表头也纳入筛选,导致后续判断失效,需要手动跳过表头。
修复后的代码
import csv def find_flight(filename, airlines, city, earliest, latest): lf = [] mf = get_filtered_CSV(filename, airlines) # 把时间转成整数,避免字符串比较的问题 earliest_int = int(earliest) latest_int = int(latest) for row in mf: # 用当前遍历的row,而非整个mf列表 if row[1] == city: flight_time = int(row[2]) if earliest_int <= flight_time < latest_int: lf.append(row) return lf def get_filtered_CSV(filename, filter_by): lst = [] with open(filename, 'r') as myfile: csv_reader = csv.reader(myfile) # 跳过表头(如果CSV没有表头,就删掉这行) next(csv_reader) for row in csv_reader: if row[0] == filter_by: lst.append(row) return lst print(find_flight("Airport.csv", "United", "Portland", "0000", "2400"))
额外说明
修复后,find_flight会正确遍历每一条筛选后的航班数据,判断当前行的城市是否匹配、时间是否在指定区间内,符合条件的行会被正常追加到结果列表lf中。如果你的CSV没有表头,记得删除next(csv_reader)这一行,不然会漏掉第一行数据。
内容的提问来源于stack exchange,提问作者TiTanTeThaR
相关产品推荐
相关产品推荐

