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