在for循环中向后索引整个数组

lhc*_*eva 5 python numpy

假设我想循环遍历数组并在循环索引中向前和向后索引所有索引,如下所示:

x = np.random.uniform(size=600)
for i in range(len(x)):
    dot = np.dot(x[:-i], x[i:])
Run Code Online (Sandbox Code Playgroud)

现在这不起作用,因为x[:-0]就像x[:0]它给出的那样[].我可以单独处理零情况但是想知道是否有更多的pythonic方式来做这件事.

Sha*_*ger 9

使用切片值的结尾-i or None.如果i是非零,那么它只是-i,但如果它是0,那么-0是假的,它评估并返回第二项None,这意味着"运行到序列结束".这是有效的,因为foo[:None]相当于foo[:],当你忽略切片的那个组成部分时它会None隐含,但是None显式传递是完全合法的,具有相同的效果.

所以你的新行将是:

dot = np.dot(x[:-i or None], x[i:])
Run Code Online (Sandbox Code Playgroud)

  • 它与"truthy"配对得很好.:-)我更喜欢用"true"和"false",因为坦率地说,在Python中,你很少关心实际的值'True`和`False`,你只关心boolean值是true还是false评估目的; truthy或falsy清楚地表明你关心的意思,而不是具体的价值. (5认同)