Skip to main content
 首页 » 编程设计

python之如何从列表中删除项目但在 Python 中保留原始索引

2025年05月04日31oomusou

所以基本上在我的程序中,当我的列表中的某个项目不满足特定条件后,我将其取出,然后通过算法运行它以检查该项目被取出是否会影响列表中的其余项目。 然而,我的问题是,当我取出这个项目时,它会将我所有其他列表项目推回 1 个索引,所以当我使用我的算法检查它是否影响其他项目时,它会搞砸,因为索引在迭代过程中不断变化for 循环。这是我的代码,我将展示一个运行示例:

    for l in range(len(assets)-1): 
    print("The current unsafe banks are:",unsafe) 
    print("Current assets of the banks which are not yet in unsafe list:") 
    for h in range(len(assets)): 
            print("Bank ", h ," Current assets: ",assets[h]," millions.") 
    print() 
    for i in range(len(assets)-1): 
        if(assets[i]<=limit): 
            print("Adding Bank:", i," to the list of unsafe banks.") 
            unsafe.append(i) 
            assets.remove(assets[i]) 
            banks.remove(banks[i]) 
            i=float(i) 
            for j in range(len(banks)): 
                for k in range(len(banks[j])-1): 
                    if i == banks[j][k]: 
                        banks[j][k+1]=0 
            assets=current_Assets(banks) 
            print(banks)     

我的问题是我如何做到这一点,以便列表在我从列表中删除和删除项目后保留项目的原始索引,而不是将其推回。谢谢。

运行示例:

未列入不安全名单的银行流动 Assets :

Bank  0  Current assets:  446.0  millions. 
Bank  1  Current assets:  250.0  millions. 
Bank  2  Current assets:  269.0  millions. 
Bank  3  Current assets:  200.0  millions. 
Bank  4  Current assets:  375.0  millions. 
Bank  5  Current assets:  250.0  millions. 
Bank  6  Current assets:  280.0  millions. 
 
Adding Bank: 3  to the list of unsafe banks. 
 
[ 
    [25.0, 1.0, 100.5, 4.0, 320.5], 
    [125.0, 2.0, 40.0, 3.0, 0], 
    [69.0, 0.0, 125.0, 3.0, 0], 
    [250.0, 2.0, 125.0], 
    [100.0, 0.0, 80.0, 4.0, 70.0], 
    [150.0, 1.0, 10.0, 2.0, 80.0, 3.0, 0] 
] 
The current unsafe banks are: [3] 
Current assets of the banks which are not yet in unsafe list: 
Bank  0  Current assets:  446.0  millions. 
Bank  1  Current assets:  165.0  millions. 
Bank  2  Current assets:  194.0  millions. 
Bank  3  Current assets:  375.0  millions. 
Bank  4  Current assets:  250.0  millions. 
Bank  5  Current assets:  240.0  millions. 

如您所见,它将 Bank 4 推回到 Bank 3。

请您参考如下方法:

列表索引始终是 0 到 len(lst) - 1。因此,当您从列表中删除一个项目时,len(lst) 在您删除的项目更新后减少一个和所有索引。没有办法改变这种行为;这完全是设计使然,因此您可以正确地迭代列表的项目。

如果你需要静态索引,那么你应该看看字典。在那里,你可以使用任何你想要的键,包括数字,所以如果你从字典中删除一个项目,它只是被删除但不会影响其他的。一把 key 就这么不见了。

>>> banks = { 
        0: 'bank 0', 
        1: 'bank 1', 
        2: 'bank 2', 
        3: 'bank 3' 
    } 
>>> banks 
{0: 'bank 0', 1: 'bank 1', 2: 'bank 2', 3: 'bank 3'} 
>>> del banks[2] # remove bank 2 
>>> banks 
{0: 'bank 0', 1: 'bank 1', 3: 'bank 3'}