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

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

调用lines[0].strip().split('t')[1:]意味着:从字符串列表中,lines得到第一行(我认为它包含有关您的数据的信息,而不是实际数据(,strip()将删除末尾的nsplit('t')将信息分离到一个列表中,然后您将[1:](倒数第二个元素(存储在cols中。

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

由于我们已经解析了第一行lines[0]中的信息,所以您希望处理其余的信息,因此在lines[1:]上循环,之前[1:]用于遍历第一行中的信息而现在用于遍历其余的行。

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

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

最后,如果你的文件看起来像这样:

某个名称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, ...], ...]

最新更新