关于字典:python中b / w [1:]和行[1:]的区别是什么?

what is the difference b/w [1:] and lines[1:] in python?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
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


lines = [line for line in file(filename)]将把数据文件中的每一行存储到一个字符串数组中,注意数据由\t分隔,每一行以
结尾,就像所有for line in file一样。

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

rows = []正在创建一个列表来存储数据行方面的信息,就像cols是一个列表,存储信息列方面的信息。

由于我们已经分析了第一行lines[0]中的信息,所以在[1:]用于遍历第一行中的信息,而现在又遍历其余行之前,您要处理其余的信息,以便循环遍历lines[1:]

如前所述,p=line.strip().split('\t')将您的
行剥离并拆分到\t上,以存储所有行信息和数据。我假设p[0]是您的数据行信息,存储在rows列表中,其余的是存储在data中的实际数据(在您的例子中是整数),它是一个数组(浮点数列表)。

即使您的数据都是整数,for line in file也会将其读作stringfloat()用于存储数据,如果需要,可以在以后用于数学运算。

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

Something name1 name2 name3 ...

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

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

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

您的输出:

1
2
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, ...], ...]