相关疑难解决方法(0)

迭代时如何从列表中删除项目?

我正在迭代Python中的元组列表,并且如果它们符合某些条件,我会尝试删除它们.

for tup in somelist:
    if determine(tup):
         code_to_remove_tup
Run Code Online (Sandbox Code Playgroud)

我应该用什么代替code_to_remove_tup?我无法弄清楚如何以这种方式删除项目.

python iteration

917
推荐指数
16
解决办法
45万
查看次数

快速从列表/队列中删除一些项目

这是一个类似问题的后续问题,它提出了最好的写作方式

for item in somelist:
    if determine(item):
         code_to_remove_item
Run Code Online (Sandbox Code Playgroud)

似乎共识就是这样的

somelist[:] = [x for x in somelist if not determine(x)]
Run Code Online (Sandbox Code Playgroud)

但是,我认为如果你只删除一些项目,大多数项目都被复制到同一个对象中,也许这很慢.在回答另一个相关问题时,有人建议:

for item in reversed(somelist):
    if determine(item):
        somelist.remove(item)
Run Code Online (Sandbox Code Playgroud)

但是,这里list.remove将搜索项目,即列表长度为O(N).可能我们受到限制,因为列表表示为数组而不是链表,因此删除项目后需要移动所有内容.但是,这里建议collections.dequeue表示为双向链表.然后可以在迭代时在O(1)中移除.我们如何实现这一目标?

更新:我也做了一些时间测试,使用以下代码:

import timeit
setup = """
import random
random.seed(1)
b = [(random.random(),random.random()) for i in xrange(1000)]
c = []
def tokeep(x):
        return (x[1]>.45) and (x[1]<.5)
"""
listcomp = """
c[:] = [x for x in b if tokeep(x)]
""" …
Run Code Online (Sandbox Code Playgroud)

python queue optimization list time-complexity

13
推荐指数
1
解决办法
2万
查看次数

迭代时更改列表的最佳方法

我在python脚本(v2.6)中有几个实例,我需要在其中修改列表.我需要从列表中弹出值以响应用户的交互式输入,并且想知道最干净的方法.目前我有一个非常脏的解决方案:a)将列表中的项目设置为我要删除为False并使用过滤器或列表推导删除它们或b)在循环中生成一个全新的列表,这似乎是不必要的将变量添加到命名空间并占用内存.

这个问题的一个例子如下:

for i, folder in enumerate(to_run_folders):
    if get_size(folder) < byte_threshold:
        ans = raw_input(('The folder {0}/ is less than {1}MB.' + \
                    ' Would you like to exclude it from' + \
                    ' compression? ').format(folder, megabyte_threshold))
        if 'y' in ans.strip().lower():
            to_run_folders.pop(i)
Run Code Online (Sandbox Code Playgroud)

我想查看列表中的每个文件夹.如果当前文件夹小于特定大小,我想询问用户是否要将其排除.如果是,请从列表中弹出文件夹.

这个例程的问题是,如果我遍历列表,我会得到意外的行为并提前终止.如果我通过切片迭代副本,pop不会拉出正确的值,因为索引被移动并且问题在弹出更多项时会复合.我还需要在我的脚本的其他区域中进行此类动态列表调整.这种功能有什么干净的方法吗?

python loops dynamic

10
推荐指数
1
解决办法
8132
查看次数

从数组中删除所有特定值

我必须从数组中删除所有特定值(如果有的话),所以我写道:

while value_to_remove in my_array:
    my_array.remove(value_to_remove)
Run Code Online (Sandbox Code Playgroud)

通过一个命令,还有更多的pythonic方法吗?

python

5
推荐指数
1
解决办法
343
查看次数