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 |
- 我建议查看stackoverflow.com/questions/509211/…
- lines[1:]将生成从index 1开始的lines列表的子列表(切片)。您应该知道python中的列表是从index 0开始的。
- rows = []分配给rows一个空列表,而rows = {}分配一个空字典。lines[1:]从lines的第二个元素开始创建一个子列表。
- 这里有四个不同的问题,如果它不是一个副本,那么这个问题就有资格接近"太广泛"。请参阅stackoverflow.com/help/on-topic上的指南——每个问题都应该是关于一个特定的编程问题,而这个问题在站点上还没有被问到。
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也会将其读作string。float()用于存储数据,如果需要,可以在以后用于数学运算。
最后,如果您的文件如下所示:
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, ...], ...] |
- 欢迎来到本网站,并感谢您努力建立一个全面的答案!这就是说,有时有必要先问一个更具体、更独特的问题——一个关于一个人非常具体的代码的问题可能只对他们有帮助,而一个关于一个更普遍的问题的问题对每个有同样问题的人都有帮助。请参阅如何回答以及如何处理"解释此$代码转储如何工作"问题中的"回答问题"。
- @查尔斯达菲谢谢你的澄清。如果这件事需要解决,请告诉我。我会把副本和他联系起来,但每个人似乎都只把他的第一个问题的链接发给他,关于[1:],但是在他的帖子里,他问了3个独立的问题,没有人解决所有3个问题。一种方法是将他3个参考或更多的链接起来,但事实上,我从一个简单的答案开始,然后继续编辑成这个冗长而详细的答案。
- 不需要删除答案——这显然对操作很有帮助。"3个独立的问题"是问题的部分原因——但既然您已经努力构建了一个好的答案,我们当然不想浪费您花费的时间。