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

时间:2016-02-28 22:28:04

标签: python loops numpy

我是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循环而它只会返回循环外的初始临时值。我不知道为什么。有人可以帮忙吗?感谢。

3 个答案:

答案 0 :(得分:2)

避免使用范围循环,只需使用for循环作为一般建议进行迭代。

如果要撤消列表,请使用reversed(my_list)

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

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

这会给你[array3, array2, ...]

要忽略反向列表中的最后一个数组,请使用切片:

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

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

答案 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,因为即使对于否定步骤,上限(第二个参数)也是排他的,即不是结果的一部分。看来你已经通过在temp中使用my_list中的最后一个数组初始化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 内容时从索引中减去1来解决这个问题。在循环中。

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 元素来摆脱它们:

my_list

我假设您的数组在循环中连接在一起。如果它是一个实际的加法(例如NumPy向量加法 - 虽然我不明白为什么加法的顺序对此很重要,除了精度,如果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)))

如果你想连接它们:

<% form_for @article do |f| %>
  <%= f.text_field :name %>
<% end %>

答案 2 :(得分:0)

您可以反向遍历列表:

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

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

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