我有一个示例文件,如下所示:
@XXXXXXXXX
VXVXVXVXVX
+
ZZZZZZZZZZZ
@AAAAAA
YBYBYBYBYBYBYB
ZZZZZZZZZZZZ
...
我只想读索引4i+2上的行,从0开始。所以我应该阅读上面片段中的VXVXV (4*0+2 = 2)...
行和YBYB...(4*1 +2 = 6)
行。我需要计算'V's, 'X's,'Y's and 'B's
的数量并存储在一个预先存在的dict中
^{pr2}$
有人能解释一下我如何避免偏离索引,只读取行列表中4*I+2索引处的行?在
Tags:
您可以执行以下操作之一:
从0开始
xrange
,然后将2添加到辅助循环中的i
上从2开始
^{pr2}$xrange
,然后以原始程序中指定的方式访问i
你就不能把这一行切成片吗?在
为其他质疑其工作原理的人编辑:
“完整”切片语法由三部分组成:
start:end:step
start
是起始索引,默认为0。因此,对于4*i+2,当i==0时,即为索引#2。在end
是结束索引,默认情况下是len(sequence)
。切片到但不包括最后一个索引。在step
是所选项目之间的增量,默认为1。通常,像3:7
这样的片将返回元素3、4、5、6(并且不是7)。但是当您添加一个step
参数时,您可以执行类似“stepby4”的操作。在执行“step by 4”意味着
start+0, start+4, start+8, start+12, ...
,这是OP想要的,只要start
参数选择正确。在我只是想让你清楚地知道你到底在想什么?(在这种情况下,您从一开始就出错了,因为
readlines()
读取了整个文件。)或者您只是在尝试筛选行列表以选择您想要的行?在我假设是后者。在这种情况下,最简单的方法就是使用listcomp按索引过滤行。e、 g.一些简单的东西,比如:
现在,你只得到了你想要的行,没有索引错误或类似的傻事。然后,您可以分离并简化剩下的代码来进行计数,只需对筛选后的列表进行操作。在
(只是稍微编辑了一下第一个列表组件,使其更加地道)
相关问题 更多 >
编程相关推荐