我试图执行for循环,如:
a = [1,2,3,4,5,6,7]
for i in range(0, len(a), 1):
if a[i] == 4:
a.remove(a[i])
我最终得到index error
,因为列表的length
变得更短但迭代器i
没有意识到。
所以,我的问题是,这样的东西怎么编码?可以根据当前数组条件在循环的每次迭代中更新range
i
吗?
答案 0 :(得分:2)
对于您提到的.pop()
,您可以使用列表推导来创建第二个列表,甚至可以修改原始列表。像这样:
alist = [1, 2, 3, 4, 1, 2, 3, 5, 5, 4, 2]
alist = [x for x in alist if x != 4]
print(alist)
#[1, 2, 3, 1, 2, 3, 5, 5, 2]
正如 user2393256 更常见的那样,您可以概括和定义一个函数my_filter()
,该函数将根据您在其中实现的某些检查返回boolean
。然后你就可以做到:
def my_filter(a_value):
return True if a_value != 4 else False
alist = [x for x in alist if my_filter(x)]
如果检查太复杂而无法输入列表解析,我会使用函数解决方案,因此主要是为了便于阅读。因此上面的例子不是最好的,因为支票很简单,但我只是想告诉你如何做。
答案 1 :(得分:1)
如果要在迭代时删除列表中的元素,则应使用列表推导。
a = [1,2,3,4,5,6,7]
a = [x for x in a if not check(x)]
您需要编写一个“检查”函数,无论您是否要将元素保留在列表中,都需要返回。
答案 2 :(得分:0)
我不知道你要去哪里,但这会做我想要你想要的东西:
i=0
a = [1,2,3,4,5,6,7]
while boolean_should_i_stop_the_loop :
if i>=len(a) :
boolean_should_i_stop_the_loop = False
#here goes what you want to do in the for loop
print i;
a.append(4)
i += 1