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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:10:22