从最大值开始获取列表的第n个元素

时间:2019-06-27 13:18:52

标签: python list

我有一个数字数组:

y = np.random.rand(1000)

我要做的是找到y的最大值,然后在该最大值出现之前和之后,从该值的位置开始获取第n个元素。

我似乎无法在数组中向后移动。

我可以轻松找到最大值,并从那里获取第n个元素:

idx = np.argmax(y)
newy = y[idx::reprate] # reprate is the number of points I want to skip

但是,这不包括我仍然想获得的idx之前的所有第n个点。

有没有我看不到的简单方法?

3 个答案:

答案 0 :(得分:2)

找到要保留的数组的第一个索引很简单:idx % reprate

newy = y[idx%reprate::reprate]

答案 1 :(得分:1)

只要在步幅上添加负数,就会倒退。

这里是一个简单的例子。这将从您提供的索引开始,然后跨2向前遍历可迭代对象,然后向后遍历可迭代对象。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[4::2]
[5, 7, 9]
>>> a[4::-2]
[5, 3, 1]

答案 2 :(得分:1)

这里是不带NumPy的选项:

import random
# Generating the random list
y = random.sample(range(1, 1000), 1000)
n = 3

# This will get the index of the max element
index = max(enumerate(y), key=lambda x: x[1])[0]

# This will get every `n` element
every_n_element = [y[(i + index) % len(y)] for i in range(0, len(y), n)]
print(every_n_element)