[英]loop through array or list in variable steps
我試圖弄清楚如何以可變步驟遍歷數組或列表。
因此,例如,如果我有以下列表...
a = [0,0,1,0,0,1,0]
...並希望使用以下邏輯:
從索引0開始
如果索引兩個點的距離為0,則移動兩個點
如果索引兩個點是1,則移動一個點
但是,我不太清楚如何實現此邏輯,因為似乎無法更改迭代的索引值。
為什么此代碼段仍返回0-6而不是0,3,6的值?
for idx,val in enumerate(a):
print(idx)
idx+=3
不要使用for
循環。
python中的for
循環與C或Java中的for
循環不同。 在這些語言中, for
循環具有初始條件 , 終止條件 ,並且每次循環運行時都有一個增量 。 而在python中, for
循環for each
循環中更多的是-您為它提供了一個可迭代的對象,並且它為該可迭代對象中的每個項目運行代碼。
在遍歷可迭代對象時修改它是一個壞主意,它可能會產生難以預測的影響,並且通常會破壞您的代碼。
但是,您始終可以使用while
循環:
a = [0,0,1,0,0,1,0]
idx = 0
while(idx < len(a) - 2):
print(idx)
if a[idx + 2] == 0:
idx += 2
elif a[idx + 2] == 1:
idx += 1
print(idx)
產生預期的輸出
0 1 3 4 6
或者,如果您將增量分別更改為3
和2
而不是2
和1
,
0 2 5
您的推理非常混亂,我對此看不到任何申請,但這是我如何理解您的問題...
原因是因為您實際上並沒有返回值,而只是返回了索引+ 3,這在開始時是錯誤的。 您要嘗試執行的操作是基於其值指向數組的新索引,如果該索引包含的值大於0,則返回該索引。
您需要引用所需的索引,檢查其值,然后返回包含值的索引。
a = [0, 0, 1, 0, 0, 1, 0]
for i, v in enumerate(a):
if i == 0:
print(i)
next
if v == 0:
next
else
print(i)
但是,老實說,這是非常丑陋且非Python的。 讓我們簡單地檢查a [i]是否包含值,如果是,則返回索引...
for i, v in enumerate(a):
if v or i == 0:
print(i)
if v or i == 0
的目的是檢查v是否具有值,如果是,則打印索引。 或者,如果我們正在看i的第一個元素。
如果您想明確地將索引移動兩個,則必須在開始處設置索引並使用while循環,因為枚舉在這里無濟於事,並且實際上並不能讓您移動索引...
a = [0, 0, 1, 0, 0, 1, 0]
i = 0
while i < len(a) - 1: # -1 to avoid out of bounds error
print(i)
if a[i + 2] == 0:
i += 2
elif a[i + 2] == 1:
i += 1
print(i) # Final print statement for the last index at the end of the while loop
我想讓您印象深刻的是,此解決方案無法與其他列表或更大列表一起擴展,因此不建議這樣做。 通過簡單地檢查值是否存在,可以保證准確性。
您應該僅根據索引是否包含值來返回該索引。 即使對於非常大的列表,這也將非常快,並且始終會縮放,即使值大於1。
我看到您希望以不同的方式執行此操作的另一個原因是,如果您正在執行字符串搜索算法。
我相信python每次迭代都會刷新變量。 因此,在第一次運行結束時,idx將為3,但是在第二次運行開始時,它將重置為1。
如果您想循環3秒,仍可以使用for循環
for i in range(0,len(a),3):
print(i)
如果需要動態迭代值,則需要使用while循環。
i=0
while i<len(a):
print(i)
if(a[i]==0):
i+=2
else:
i+=1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.