我是编码和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=' ')
此外,我真的不明白如何在我自己的计算机上测试这些代码,以便我可以自己解决。任何帮助都会得到很大的帮助。提前致谢。
答案 0 :(得分:-3)
数组切片表示法(arr[1:2:1]
)选择序列的一部分。符号由三个以冒号分隔的表达式组成,表示结果序列的start
,stop
和可选step
。
data[2:2 * n + 2:2]
这样的表达式表示start
的{{1}}索引,2
索引等于stop
,2 * 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()以获取返回的备用版本 迭代器。