如何在Python中以相反的顺序遍历列表(仅使用索引样式:'... in range(...)')

3
我是一个新手,刚开始接触Python编程语言,对于在该语言下进行循环还不太熟悉。例如,我有以下代码(列表中的元素类型为数组):
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 值。我不知道为什么,请问有人可以帮忙吗?谢谢。

3个回答

5

一般建议避免使用range进行循环,而是使用for循环进行迭代。

如果你想要反转一个列表,请使用reversed(my_list)

因此,在你的情况下解决方法如下:

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

这将给你一个[array3,array2,...]

要从反转列表中省略最后一个数组,请使用切片:

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

所以你的代码变成了一行 :-)

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,因为即使是负步长,上限(第二个参数)也是排除在外的,即不是结果的一部分。看起来你已经通过在循环之前用 my_list 中的最后一个数组初始化 temp 变量,然后在循环中使用索引访问 my_list 内容时将其减去 1 来解决了这个问题。

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)))

0
您可以像这样反向遍历一个列表:
for i in range(len(lis), 0, -1):
    print (i)

要在第二个元素停止,请编辑您的range()函数以在1处停止:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接