BTR*_*BTR 15 python slice python-3.x
我在QC审查中遇到了一些有趣的代码,并对它的行为感到惊讶。我很好奇它是否记录在任何地方。
for i in range(0, my_array.max(), 3)[:]:
# other code here
Run Code Online (Sandbox Code Playgroud)
我对[:]after 的需求感到好奇range,因此我对其进行了测试:
>>> range(0, 10, 3)
range(0, 10, 3)
>>> range(0, 10, 3)[:]
range(0, 12, 3)
Run Code Online (Sandbox Code Playgroud)
这些范围定义的实际顺序是相同的,但是我在Python 范围文档中的任何地方都看不到这种切片行为,因此我很好奇这里的实际情况。
我认为这里有一些事情是混合在一起的。
\n\nrange产生切片行为,因为使用非默认索引进行切片是有意义的:>>> list(range(10, 20)[3:7])\n[13, 14, 15, 16]\nRun Code Online (Sandbox Code Playgroud)\n\nsome_list[:]相当于[x for x in some_list].[:]范围对象(或实际列表,如果它是 Python 2)起作用,这使得不的。无论如何,生成的范围对象/列表不会在其他任何地方引用。list, tuple,range ”(重点是我的)所以它被记录下来,但很少有人读过它。