python - 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()
将\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 file
也会将其读取为string
. float()
用于能够将数据存储为以后可以根据需要用于数学运算的东西。
最后,如果您的文件如下所示:
某事 名称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, ...], ...]
推荐阅读
- javascript - 在不同位置具有不同部分的 React Component
- c - C pipe fork fd 题 - 简单的 xv6 乒乓球题
- javascript - 不变违规 - 无法导入自定义组件反应原生
- google-cloud-platform - 为什么不使用 ssh 连接 gcp slurm vm?
- css - 为什么页面加载时会滚动?
- c++ - 访问结构中的数组会导致警告与 clang
- mysql - 在 SQL 中也使用 group by 访问外键
- mysql - 找不到 MySQL 丢失更新问题的解决方案
- php - 如何为 API 平台中的实体配置 JSON 架构?
- pine-script - 锚定的 vwap 不会在条件下开始绘图