【发布时间】:2017-12-11 18:00:38
【问题描述】:
我在 Python 中有一个包含 29400 个值的列表,我正在尝试检查列表中的每个元素是否大于其左侧的 2000 个邻居和右侧的 2000 个邻居。如果元素大于其 4000 个邻居,我想检索元素的索引。如果右侧没有 2000 个邻居,我只想将其与未来的元素进行比较,直到到达列表末尾,反之亦然,如果左侧没有 2000 个值。
def find_peaks(t):
prev = []
future = []
peak_index = []
for i in range(len(t)-2000): # compare element with previous values
for j in range(1,2001):
if t[i]<t[i+j]:
prev.append(False)
break
if j==2000:
if t[i]<t[i+j]:
prev.append(False)
break
prev.append(True)
for i in range(1999,len(t)-1): # compare element with future values
for j in range(1,2001):
if t[i]<t[i-j]:
future.append(False)
break
if j==2000:
if t[i]<t[i-j]:
future.append(False)
break
future.append(True)
future = future[::-1] # reverse list
for i in range(0,len(prev)-1):
if prev[i] == True:
if prev[i] == True:
peak_index.append(i)
有没有人知道任何更好的方法来解决这个问题?我在比较列表末尾和开头附近的元素时遇到问题 - 如果列表中没有 2000 个元素可供我比较,那么列表会环绕到列表的开头,这不是什么我要。
【问题讨论】:
-
您想要列表的循环行为吗?我的意思是,如果你的列表中有 10k 个元素,并且你正在比较第一个元素开始,那么它的左侧没有要比较的元素。所以你想把它和后端进行反向比较吗?还是您跳过左侧的比较?我说得够清楚了吗?
-
不,我不想要循环行为。如果我要比较第三个元素,我只想将它与左侧的第一个和第二个元素以及右侧的 2000 个元素进行比较。我是 python 和一般编程的新手,可能有一种更简单的方法,我只是不知道。
-
好的,我明白了,感谢您的澄清。
标签: python