我试图从包含子列表的列表中删除特定字符串的所有实例。例如,像这样:
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']]
