如何在Python中以相反顺序遍历列表(索引样式:';…仅限于范围(…)';)

如何在Python中以相反顺序遍历列表(索引样式:';…仅限于范围(…)';),python,loops,numpy,Python,Loops,Numpy,我是Python新手,所以我仍然习惯于这种语言中的循环。 例如,我有以下代码(列表中的元素类型是数组) 我想从列表的末尾遍历列表,并在第二个元素(k=1)处停止,但看起来for循环永远不会被输入,它只会返回循环外部的初始温度。我不知道为什么。有人能帮忙吗?谢谢。您可以像这样反向遍历列表: for i in range(len(lis), 0, -1): print (i) 要在第二个元素处停止,请编辑range()函数以在1处停止: for i in range(len(lis), 1

我是Python新手,所以我仍然习惯于这种语言中的循环。 例如,我有以下代码(列表中的元素类型是数组)


我想从列表的末尾遍历列表,并在第二个元素(
k
=
1
)处停止,但看起来for循环永远不会被输入,它只会返回循环外部的初始温度。我不知道为什么。有人能帮忙吗?谢谢。

您可以像这样反向遍历列表:

for i in range(len(lis), 0, -1):
    print (i)
要在第二个元素处停止,请编辑range()函数以在1处停止:

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

避免使用范围循环,一般建议使用for循环进行迭代

如果要反转列表,请使用
反转(我的列表)

因此,在您的情况下,解决方案是:

my_list = reversed([array0,array1,array2,array3])
这将为您提供
[array3,array2,…]

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

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

因此,您的代码变成了一行:-)

让我们一部分一部分地看一下:

len(我的列表)
是4。因此
range(len(my_list)-1,0)
range(3,0)
是相同的,在Python 2中是
[]
。(在Python3中,尝试
list(范围(3,0))
查看相同的空列表。)

如果需要递减范围,请使用负步长(第三个参数):

给出
[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
中的值已排序),请使用适当的零元素,而不是
空数组

您甚至可以完全摆脱循环。如果要添加阵列,请执行以下操作:

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