2016-02-28 42 views
0

我是Python的新手,所以我仍然習慣於以這種語言循環。 因此,舉例來說,我有以下代碼(在列表中的元素類型是陣列)如何在Python中以相反的順序遍歷列表(索引樣式:'... in range(...)')

my_list = [array0, array1, array2, array3] 
temp = my_list[-1] 
for k in range(len(my_list) - 1, 0): 
    temp = temp + my_list[k - 1] 
return temp 

我想從列表的末尾遍歷列表,並且在第二元件停止(k = 1 ),但看起來for循環永遠不會被輸入,它只會返回循環外的初始temp。我不知道爲什麼。有人可以幫忙嗎?謝謝。

回答

2

避免接觸範圍內循環,只是作爲一般性建議迭代for循環。

如果您想要反轉列表,請使用reversed(my_list)

所以你的情況的解決辦法是:

my_list = reversed([array0,array1,array2,array3]) 

這讓你[array3, array2, ...]

對於從扭轉清單中移除最後一個數組,使用切片:

my_list = reversed([array0,array1,array2,array3])[:-1] 

所以你代碼轉向單線程:-)

-1

您可以反向遍歷列表,像這樣:

for i in range(len(lis), 0, -1): 
    print (i) 

要停止的第二元素編輯範圍()函數停止在1:

for i in range(len(lis), 1, -1): 
     print (i) 
1

讓我們看看這部分零件:

len(my_list)是4.因此range(len(my_list)-1, 0)相同range(3, 0),這是在Python 2 [](在Python 3,儘量list(range(3, 0))看到同樣的空列表。)

如果你想有一個下降的範圍內,使用負步驟(第三個參數):

range(3, 0, -1) 

給出[3, 2, 1]。它不包括0,因爲即使是負值步驟,上限(第二個參數)也是排他性的,即不是結果的一部分。看起來你已經通過初始化temp變量,在my_list之前已經完成了循環,然後在索引中減去1時使用它來訪問循環中的my_list內容。

my_list = [array0, array1, array2, array3] 
temp = my_list[-1] 
for k in range(len(my_list) - 1, 0, -1): 
    temp = temp + my_list[k - 1] 
return temp 

因此可能工作。

但是,如果你需要的指數只能訪問my_list,您可以通過在的my_list的元素直接迭代擺脫他們(在這裏反向)爲了你想要的:

my_list = [array0, array1, array2, array3] 
temp = empty_array # Not quite sure what this has to be. (Depends on your array type.) 
for array in reversed(my_list): 
    temp = temp + array 
return temp 

我假設你的數組在循環中連接在一起。如果它是一個實際的加法(NumPy向量加法,例如—,雖然我不明白爲什麼加法順序對此很重要,除了可能的精度,如果my_list中的值已排序),請使用適當的零元素而不是empty_array

你甚至可以完全擺脫循環。如果你想添加您的數組:

my_list = [array0, array1, array2, array3] 
return sum(reversed(my_list)) 

如果你想將它們串聯:

from itertools import chain 

my_list = [array0, array1, array2, array3] 
return list(chain.from_iterable(reversed(my_list)))