【问题标题】:what is the difference b/w [1:] and lines[1:] in python? [duplicate]python中的[1:]和lines[1:]有什么区别? [复制]
【发布时间】:2018-07-12 09:18:38
【问题描述】:

请向我解释下面注释的行:

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[1:] 将生成从index 1 开始的lines 列表的子列表(切片)。你应该知道python中的列表是从index 0开始的
  • rows = [] 分配给rows 一个空列表,而rows = {} 分配一个空字典。 lines[1:]lines的第二个元素开始创建子列表。
  • 这里有四个不同的问题,如果它不是已经是重复的,那么它就有资格被关闭为“太宽泛”。请参阅stackoverflow.com/help/on-topic 上的指南——每个 SO 问题都应该是关于一个特定网站上尚未提出的编程问题。

标签: python dictionary list-comprehension


【解决方案1】:

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 列表中,而其余部分是存储在 data 中的实际数据(在您的情况下为整数),这是一个数组(浮点列表列表)。

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

最后如果你的文件是这样的:

某事 name1 name2 name3 ...

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

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

条件3 data3.1 data3.2 data3.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, ...], ...]

【讨论】:

  • 欢迎访问该网站,感谢您为构建全面的答案而付出的努力!也就是说,有时值得先尝试一个更具体和独特的问题——一个关于一个人非常具体的代码的问题可能只会对他们有帮助,而一个关于一个更普遍的问题的问题将有助于每个人都有同样的问题。请参阅 How to AnswerHow to handle “Explain how this ${code dump} works” questions 中的“回答好问题”。
  • @CharlesDuffy 感谢您的澄清。如果这需要删除,请告诉我。我会将重复链接给他,但似乎每个人都只给他发送关于[1:] 的第一个问题的链接,但是在他的帖子中,他问了 3 个单独的问题,没有人解决所有 3 个问题。一种方法是链接他 3 个或更多参考,但是老实说,我从一个简单的答案开始,然后继续编辑这个冗长而详尽的答案。
  • 无需删除答案——它显然可能对 OP 有帮助。 “3 个单独的问题”是问题存在问题的部分原因 - 但既然您已经努力构建一个好的答案,我们当然不想浪费您花费的时间。
猜你喜欢
  • 2016-09-15
  • 1970-01-01
  • 2012-09-26
  • 2012-06-08
  • 2011-04-07
  • 1970-01-01
  • 2011-02-27
  • 2015-03-03
  • 2017-08-10
相关资源
最近更新 更多