Skip to main content
 首页 » 编程设计

python之从子列表列表中删除所有同名项目

2025年05月04日8JustinYoung

我试图从包含子列表的列表中删除特定字符串的所有实例。例如,像这样:

myarray = ['a', 'a', ['b', 'a', 'a'], ['a', 'c', 'd', 'a'], 'a', ['a', 'd']] 

结果是这样的

mylist = [['b'],['c','d'],['d']] 

在删除 'a' 的所有实例之后。

我用过这段代码:

def delnodata(lst, what): 
for index, item in enumerate(lst): 
    if type(item) == list: 
        delnodata(item, what) 
    else: 
        if item == what: 
            lst.remove(item) 
delnodata(mylist, 'a') 

但是输出是:

[['b', 'a'], ['c', 'd'], 'a', ['a', 'd']] 

我在这个网站上看到了很多类似的问题,但遗憾的是我的编程技能不够好,无法自己将这些问题放在一起!

请您参考如下方法:

我会递归地做这个。这也适用于任意嵌套级别。

myarray = ['a', 'a', ['b', 'a', 'a'], ['a', 'c', 'd', 'a'], 'a', ['a', 'd']] 
 
def nestremove(lst, what): 
    new = [] 
    for item in lst: 
        if isinstance(item,list): 
            new.append(nestremove(item,what)) 
        elif item != what: 
            new.append(item) 
    return new 
 
print(myarray) 
myarray = nestremove(myarray, 'a') 
print(myarray) 

该函数返回一个新列表,因此我们不必在迭代它时从原始列表中删除项目,正如其他人已经指出的那样可能很危险(参见 this 问题,尤其是评论)。相反,您可以重新分配 myarray。

输出:

['a', 'a', ['b', 'a', 'a'], ['a', 'c', 'd', 'a'], 'a', ['a', 'd']] 
[['b'], ['c', 'd'], ['d']]