Python无法从列表列表中删除None值

时间:2019-09-17 12:15:33

标签: python python-3.x list

我正试图从我拥有的csv文件中删除None值。在下面的代码的第一部分中,我将空白值转换为None值,但是在我调用过滤器时,在最后一部分中,它将打印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值,但仍然出现错误,提示我无法在float(所有值)上运行max()或min()在代码的第一位从字符串转换为浮点数)。

1 个答案:

答案 0 :(得分:1)

您当前有类似的东西

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时,该项目将根本不会添加到结果列表中。