首页 > 解决方案 > 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=' ')

此外,我真的不明白如何在我自己的计算机上测试这段代码,以便我自己弄清楚。任何帮助将不胜感激。提前致谢。

标签: pythonpython-3.xinput

解决方案


数组切片符号 ( arr[1:2:1]) 选择序列的一部分。该符号由三个用冒号分隔的表达式组成,表示结果序列的startstop和 可选step

表达式 likedata[2:2 * n + 2:2]表示 的start索引2stop等于 的索引2 * n + 2step等于的索引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()。

https://docs.python.org/3.4/library/functions.html#slice


推荐阅读