关于python:在for循环中向后索引整个数组

Index entire array backwards in for loop

假设我想循环一个数组,并且在循环中为数组的所有索引向前和向后进行索引,如下所示:

1
2
3
x = np.random.uniform(size=600)
for i in range(len(x)):
    dot = np.dot(x[:-i], x[i:])

现在这不起作用,因为x[:-0]就像x[:0][]一样。我可以单独处理这个零案例,但我想知道是否有一种更为Python式的方式来做这件事。


使用-i or None的片尾值。如果i不是零,那么它只是-i,但是如果是0,那么-0是不可靠的,它评估并返回第二个术语None,意思是"运行到序列结束"。这是因为foo[:None]相当于foo[:],当你省略了切片的那个部分,它就隐式地变成了None,但是显式地传递None是完全合法的,具有同样的效果。

所以你的新行是:

1
dot = np.dot(x[:-i or None], x[i:])


为什么不使用长度信息:

1
2
3
4
length = len(x)

for i in range(length):
    dot = np.dot(x[:length-i], x[i:])