Skip to main content
 首页 » 编程设计

python之删除列表中条目的最有效方法

2025年05月04日14jillzhang

我有一个庞大的 4D 数据集,分布在 4 个变量中,x_list、y_list、z_list 和 i_list。每个都是 N 个标量的列表,其中 X、Y 和 Z 代表点在空间中的位置,I 代表强度。

我已经有一个函数可以通过将强度设置为 0 来挑选并标记可忽略的点(强度太低的点)以进行删除。但是,当我在我的 200 万个点集上运行它时,删除过程需要几个小时。

目前,我正在使用 .pop(index) 命令删除数据点,因为它做得非常干净。这是代码:

counter = 0 
i = 0 
for entry in i_list 
    if (i_list[i] == 0): 
        x_list.pop(i) 
        y_list.pop(i) 
        z_list.pop(i) 
        i_list.pop(i) 
        counter += 1 
        print (counter, "points removed") 
    else 
        i += 1 

我怎样才能更有效地做到这一点?

请您参考如下方法:

我认为如果 i_list[i] != 0,则为每个现有列表创建新的空列表并向它们追加项目会更快。查找 time complexity你正在做的操作,你会看到删除项目是 O(n),而追加是 O(1)。当前,您正在执行 很多 的 O(n) 删除操作,并且 n 非常大,这将非常慢。

所以像这样:

new_x = [] 
new_y = [] 
new_y = [] 
new_i = [] 
 
for index in range(len(i_list)): 
    if i_list[index] != 0: 
        new_x.append(x_list[index]) 
        new_y.append(y_list[index]) 
        # Etc. 

更进一步,您应该查看 numpy 数组,其中子集以找到 i_list != 0 的项目集会非常快。