python中的黑白[1:]和线[1:]有什么区别?

时间:2018-07-12 09:18:38

标签: python dictionary list-comprehension

请向我解释以下评论:

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

1 个答案:

答案 0 :(得分:0)

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

调用for line in file的意思是:从字符串列表lines[0].strip().split('\t')[1:]中获得第一行(我认为其中包含有关您的数据的信息,而不是实际数据)lines将删除{{1} },最后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 filestring用于将数据存储为以后可用于数学运算的内容。

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

  

名称1名称2名称3 ...

     

condition1 data1.1 data1.2 data1.3 ...

     

condition2 data2.1 data2.2 data2.3 ...

     

condition3 data3.1 data3.2 data3.3 ...

您的输出:

float()