Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
481 views
in Technique[技术] by (71.8m points)

python - Index entire array backwards in for loop

Suppose I would like to loop over an array and within the loop index the array forward and backward for all of its indices like so:

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

Now this doesn't work, because x[:-0] is just like x[:0] which gives []. I could handle the zero case separately but was wondering whether there's a more pythonic way of doing this.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use an end of slice value of -i or None. If i is non-zero, then it's just -i, but if it's 0, then -0 is falsy, and it evaluates and returns the second term, None, which means "run to end of sequence". This works because foo[:None] is equivalent to foo[:], when you omit that component of the slice it becomes None implicitly, but it's perfectly legal to pass None explicitly, with the same effect.

So your new line would be:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...