首页 > 解决方案 > python中的b/w [1:]和lines[1:]有什么区别?

问题描述

请向我解释下面评论的行:

def readfile(filename):
    lines = [line for line in file(filename)]
    cols = lines[0].strip().split('\t')[1:] #why [1:] here? what is it doing?
    rows = [] #whats the difference between rows = [] and rows = {}
    data=[]
    for line in lines[1:]: #what lines[1:] is doing?
        p=line.strip().split('\t')
        rows.append(p[0])
        #why we used float below if my file contains only integer numbers?
        data.append([float(x) for x in p[1:]])    
    return rows,cols,data

标签: pythondictionarylist-comprehension

解决方案


lines = [line for line in file(filename)]会将数据文件中的每一行存储到一个字符串数组中,请注意,您的数据由分隔,\t并且每一行都以\n所有结尾for line in file

调用lines[0].strip().split('\t')[1:]意味着:从字符串列表中lines获取第一行(我假设它包含有关您的数据而不是实际数据的信息)strip()\n在最后删除,split('\t')将信息分成一个列表,然后您在其中存储[1:](第二个到最后一个元素)cols.

rows = []正在创建一个列表来按行存储有关您的数据的信息,就像cols按列存储信息的列表一样。

由于我们已经解析了第一行中的信息,因此lines[0]您希望处理其余部分,因此您循环过去lines[1:],之前[1:]用于检查第一行中的信息,现在用于检查其余行。

p=line.strip().split('\t')和以前一样,将剥离您的行\n并将其拆分\t以存储您的所有行信息和数据。p[0]我假设您的数据的逐行信息并存储在rows列表中,而其余的是实际数据(在您的情况下为整数),其中存储的data是一个数组(浮点列表列表)。

即使您的数据都是整数,for line in file也会将其读取为string. float()用于能够将数据存储为以后可以根据需要用于数学运算的东西。

最后,如果您的文件如下所示:

某事 名称1 名称2 名称3 ...

条件1 数据1.1 数据1.2 数据1.3 ...

条件2 数据2.1 数据2.2 数据2.3 ...

条件3 数据3.1 数据3.2 数据3.3 ...

你的输出:

cols = ['name1', 'name2', 'name3', ...]
rows = ['condition1', 'condition2', 'condition3', ...]
data = [[data1.1, data1.2, data1.3, ...], [data2.1, data2.2, data2.3, ...], [data3.1, data3.2, data3.3, ...], ...]

推荐阅读