Python迭代列表中列的元素

2024-05-20 22:03:31 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,所有python新手更习惯于矩阵式软件

我在遍历列表列表时遇到问题。在

我导入了一个csv文件作为列表列表

['2004', '1', '7', '20', '50', '0', '8.92', '7.63', '9.84', '0.34', '2'],
 ['2004', '1', '7', '21', '0', '0', '9.4', '8.69', '10.04', '0.27', '2'],
 ['2004', '1', '7', '21', '10', '0', '9.14', '8.02', '9.75', '0.29', '2'],
 ['2004', '1', '7', '21', '20', '0', '9.12', '8.11', '9.75', '0.14', '2'],
 ['2004', '1', '7', '21', '30', '0', '9.09', '8.59', '9.75', '0.17', '2'],
 ['2004', '1', '7', '21', '40', '0', '8.85', '8.11', '9.56', '0.16', '2'],
 ['2004', '1', '7', '21', '50', '0', '8.86', '8.11', '9.46', '0.24', '2'],
 ['2004', '1', '7', '22', '0', '0', '8.72', '7.92', '9.36', '0.23', '2'],
 ['2004', '1', '7', '22', '10', '0', '9.01', '7.73', '10.23', '0.35', '2'],
 ['2004', '1', '7', '22', '20', '0', '9.45', '8.4', '10.42', '0.37', '2'],
 ['2004', '1', '7', '22', '30', '0', '9.14', '8.4', '10.13', '0.34', '2'],
 ['2004', '1', '7', '22', '40', '0', '9.04', '8.5', '9.94', '0.25', '2'],
 ...]

每行是元素的列表

我需要使用第4列(第3列从0开始计数)作为标准从文件中提取(筛选)数据行,即,如果第4列中的任何元素大于3且小于5,则将该行写入新列表;如果第4列元素大于17且小于19,则也将该行写入相同的新列表。在

^{pr2}$

此代码运行时没有错误,但返回一个空的dataFlt列表

有什么建议非常感谢


Tags: 文件csv数据元素列表标准软件错误
2条回答

您需要先将列从字符串转换为浮点:

column = float(dataIn[i][3])
if 3.0 <= column <= 5.0 or 17.0 <= column <= 19.0:
    dataFlt.append(dataIn[i])

我使用比较链接来简化测试,并将而不是索引添加到dataFlt。在

您的代码可以简化为在读取时过滤

^{pr2}$

这将在一个步骤中生成dataFlt列表,而根本不构建dataIn列表。如果您确实需要一个dataIn列表用于其他目的,只需调用CSV阅读器上的list()

with open('imput.csv', 'r') as data:
    datareader = csv.reader(data)
    dataIn = list(datareader)

dataFlt = [row for row in dataIn 
           if 3.0 <= float(row[3]) <= 5.0 or 17.0 <= float(row[3]) <= 19.0]

如果要将字符串与浮点进行比较,则需要强制转换为浮点:

for row in datareader: # just iterate over the datareader
    if  3.0 <= float(row[3]) <=  5.0:
        dataFlt.append(row)
    elif 17.0 <=  float(row[3]) <= 19.0:
        dataFlt.append(row)

或者:

^{pr2}$

也可以使用“过滤器”仅保留所需的行:

filter(lambda x: 3.0 <= float(x[3]) <= 5.0 or 17.0 <= float(x[3]) <= 19.0  , datareader)

相关问题 更多 >