首页 > 解决方案 > Python 无法从列表中删除 None 值

问题描述

我正在尝试从我拥有的 csv 文件中删除 None 值。我在下面代码的第一部分将空白值转换为 None 值,但在最后一部分当我调用 filter 它打印 column_list 但 None 值也仍然存在。我需要删除它们,以便我可以计算出每个列表中似乎不适用于它们的最大/最小值?

with (inFile) as f:
    _= next(f)
    list_of_lists = [[float(i) if i.strip() != '' else None for i in line.split(',')[2:]]
        for line in f]
inFile.close()

log_GDP_list = [item[0] for item in list_of_lists]
social_support_list = [item[1] for item in list_of_lists]
healthy_birth_list = [item[2] for item in list_of_lists]
freedom_choices_list = [item[3] for item in list_of_lists]
generosity_list = [item[4] for item in list_of_lists]
confidence_gov_list = [item[5] for item in list_of_lists]

column_list = []
column_list.append([log_GDP_list, social_support_list, healthy_birth_list, freedom_choices_list, generosity_list, confidence_gov_list])
res = list(filter(None, column_list)) 
print(res)

此外,当仅在其中一个行列表(例如 log_GDP_list)上运行过滤器时,它会删除 None 值,但我仍然收到错误消息,说我无法在浮点数上运行 max() 或 min()(所有值都是从字符串浮动在代码的第一位)。

标签: pythonpython-3.xlist

解决方案


你目前有这样的东西

l = [
    float(i) if i.strip() != '' else None
    for i in line.split(',')[2:]
]

你想要的是这样的:

l = [
    float(i)
    for i in line.split(',')[2:]
    if i.strip()
]

这样,当i.strip()评估为 False 时,该项目根本不会添加到结果列表中。


推荐阅读