python - data[2:2 * n + 2:2] 与下面的代码有关
问题描述
我是编码和python的新手。我已经参加了介绍 comp sci 课程,但是在尝试理解大多数代码时我仍然觉得我的深度不够,所以如果这个问题看起来很糟糕,请原谅我。
我正在上 Edx 上的算法课,它有一个自动评分器。为每个问题提供了入门代码,并包含如下部分。这部分对我来说特别难以理解。
我相信我编写的函数中会输入一个列表,看起来像这样 [1:2,4:6,7:10],但我不太确定。
我希望有人可以帮助我理解这段代码,这样我就可以围绕数据设计一个函数。
if __name__ == '__main__':
input = sys.stdin.read()
data = list(map(int, input.split()))
n = data[0]
m = data[1]
starts = data[2:2 * n + 2:2]
ends = data[3:2 * n + 2:2]
points = data[2 * n + 2:]
#use fast_count_segments
cnt = naive_count_segments(starts, ends, points)
for x in cnt:
print(x, end=' ')
此外,我真的不明白如何在我自己的计算机上测试这段代码,以便我自己弄清楚。任何帮助将不胜感激。提前致谢。
解决方案
数组切片符号 ( arr[1:2:1]
) 选择序列的一部分。该符号由三个用冒号分隔的表达式组成,表示结果序列的start
、stop
和 可选step
。
表达式 likedata[2:2 * n + 2:2]
表示 的start
索引2
、stop
等于 的索引2 * n + 2
和step
等于的索引2
。结果将是一个从第二个索引开始的序列,在 index 之前停止2 * n + 2
,并以 of 的增量step
进行2
。
class slice(start, stop[, step]) 返回一个切片对象,表示由 range(start, stop, step) 指定的索引集。start 和 step 参数默认为 None。Slice 对象具有只读数据属性 start、stop 和 step,它们仅返回参数值(或其默认值)。它们没有其他明确的功能;但是它们被 Numerical Python 和其他第三方扩展使用。当使用扩展索引语法时,也会生成切片对象。例如:a[start:stop:step] 或 a[start:stop, i]。有关返回迭代器的替代版本,请参见 itertools.islice()。
推荐阅读
- ruby-on-rails - 在 Controller 中从 .each 迭代中声明变量
- python - “ascii”编解码器无法编码字符:序数不在范围内(128)
- flutter - 如何在 Flutter 中进行集成测试?
- amazon-web-services - 指向 google 域中的 aws 公共托管区域的子域
- c - 函数结构:“如果错误,提前返回”还是“如果错误,赋值,否则,赋值,返回赋值”?
- r - 如何将 ggplot2 箱线图分组为异质组(不是通常的箱线图分组)?
- c# - 使用 GitLab 时在本地目录中的 C# 中调用另一个类中的类不起作用
- javascript - 如何在几秒钟后更改图像期间添加 FadeIn/FadeOut javascript 效果
- html - HTML5 输入属性 UTF-8,最小/最大,无特殊字符
- c++ - 对类型“A *”的非常量左值引用不能绑定到不相关类型“std::shared_ptr ”的值