如何在Python中以相反顺序遍历列表(索引样式:';…仅限于范围(…)';)
我是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
我想从列表的末尾遍历列表,并在第二个元素(
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)))