我有一個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和編程新手,可能有更簡單的方法去實現它,我只是不知道。 – Ca01an
好的,我明白了你的意思,謝謝澄清。 –