2024-06-26 03:34:26 发布
网友
我在Python中遍历一个元素列表,对其执行一些操作,然后在满足某些条件时删除它们。
for element in somelist: do_action(element) if check(element): remove_element_from_list
我应该用什么来代替remove_元素? 我也看到过类似的问题,但请注意,do_action部分的存在将对所有元素执行,因此消除了使用过滤器的解决方案。
您始终可以遍历列表的副本,从而可以自由修改原始列表:
for item in list(somelist): ... somelist.remove(item)
列表组件:
results = [x for x in (do_action(element) for element in somelist) if check(element)]
为了满足以下条件:原地修改原始列表,不复制列表,只执行一次操作,有效,传统的解决方案是向后迭代:
for i in xrange(len(somelist) - 1, -1, -1): element = somelist[i] do_action(element) if check(element): del somelist[i]
奖励:不会在每次迭代中执行len(somelist)。适用于任何版本的Python(至少可以追溯到1.5.2)。。。s/X范围/范围/对于3.X
len(somelist)
更新:如果你想迭代向前,这是可能的,只是更复杂和丑陋:
i = 0 n = len(somelist) while i < n: element = somelist[i] do_action(element) if check(element): del somelist[i] n = n - 1 else: i = i + 1
您始终可以遍历列表的副本,从而可以自由修改原始列表:
列表组件:
为了满足以下条件:原地修改原始列表,不复制列表,只执行一次操作,有效,传统的解决方案是向后迭代:
奖励:不会在每次迭代中执行
len(somelist)
。适用于任何版本的Python(至少可以追溯到1.5.2)。。。s/X范围/范围/对于3.X更新:如果你想迭代向前,这是可能的,只是更复杂和丑陋:
相关问题 更多 >
编程相关推荐