数据[2:2 * n + 2:2]与下面的代码有关

时间:2018-06-08 02:25:22

标签: python python-3.x input

我是编码和python的新手。我参加了一个简介的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=' ')

此外,我真的不明白如何在我自己的计算机上测试这些代码,以便我可以自己解决。任何帮助都会得到很大的帮助。提前致谢。

1 个答案:

答案 0 :(得分:-3)

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

data[2:2 * n + 2:2]这样的表达式表示start的{​​{1}}索引,2索引等于stop2 * n + 2等于step 2。结果将是从第二个索引开始的序列,在索引2 * n + 2之前停止,并以step的{​​{1}}为增量进行。

  

class slice(start,stop [,step])返回表示的切片对象   由范围(开始,停止,步骤)指定的索引集。开始   和步骤参数默认为无。切片对象具有只读数据   属性start,stop和step只返回参数   值(或其默认值)。他们没有其他明确的功能;   但它们被Numerical Python和其他第三方使用   扩展。扩展索引时也会生成切片对象   使用语法。例如:a [start:stop:step]或[start:stop,i]。   请参阅itertools.islice()以获取返回的备用版本   迭代器。

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