我有一個正在回圈的陣列,我想將每個元素與它旁邊的元素進行比較,如果它較大,那么我想對其索引進行處理。很明顯,列舉在這種情況下會有幫助;但是我遇到了一個'index out of range error':
array = [1,2,3,4]
for index,i in enumerate(array)。
if array[index]>array[index 1] 。
...
雖然我知道有其他方法可以做到這一點。
有什么方法可以讓上面的內容在enumerate中作業嗎?我試著做enumerate(array)-1;知道這不會起作用。但是有什么這樣的方法可以解決索引錯誤嗎?謝謝你
我知道我們可以通過簡單地使用for回圈中的'i'來輕松完成上述操作,但只是好奇我是否可以在這里操作列舉。
uj5u.com熱心網友回復:
你可以直接縮短范圍:
for i, val in enumerate(array[:-1] )。
if val > array[i 1] 。
# do stuff[/span
如果你不需要索引,你可以使用zip達到同樣的效果:
for prev, crnt in zip(array, array[1: ] ) 。
if prev > crnt:
# 做不需要索引的事情。
切片需要O(n)額外的空間,如果你不希望這樣,你可以使用你原來的方法,沒有enumerate,而是一個簡單的range:
for i in range(len(array)-1):
if array[i] > array[i 1] 。
# ...
uj5u.com熱心網友回復:
使用zip和slice:
for i, j in zip(array, array[1: ] ) 。
print(f'i: {i} - j: {j}')
輸出:
i: 1 - j: 2 - j.
i: 2 - j: 3 - j: 3
i: 3 - j: 4 - j: 4
uj5u.com熱心網友回復:
這樣做將把index設定為0,i設定為1。在Python中,一個串列是從0開始的。所以在i=3的時候,你看到的是array[i 1]=array[4],而這并不存在! 這就是為什么程式會說'索引超出范圍錯誤'。
如果你想堅持使用串列,我的建議是這樣的:
array = [1,2,3,4]
for i in range(len(array) -1)。
if array[i]> array[i 1]。
...
如果你想操作索引,那么它將是你回圈中的當前索引(i)。也許我沒有正確理解你的問題,但我建議你使用numpy,如果你想處理類似陣列的物件。
Charles
uj5u.com熱心網友回復:
對于串列中的最后一個元素,你需要應用什么邏輯?
你可以使用range函式而不是enumerate。
如果你不需要對最后一個元素實施業務邏輯,那么使用下面的方法:
array = [1,2,3,4]
l = len(array)
for i in range(l-1)。
if array[i]> array[i 1]。
...
如果你確實需要對最后一個元素實作業務邏輯,那么使用下面的方法:
array = [1,2,3,4]
l = len(array)
for i in range(l)。
if i==l-1:
實作最后一個元素的邏輯
else:
if array[i]> array[i 1]。
....
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/325739.html
標籤:
