我有一个嵌套列表作为嵌套的元组列表,如下所示,
nest_list= [[('aa','1'),('bb','2')],[('cc','3'),('bb','4')],[('dd','5'),('dd','6')]]
我需要解析列表并删除包含值' bb'的元组。这样我的最终嵌套列表将如下所示
final_nest_list= [[('aa','1')],[('cc','3')],[('dd','5'),('dd','6')]]
我尝试使用嵌套" for循环"但似乎没有效率。是否有任何"递归方式"在python中执行此操作,以便即使嵌套列表的深度更改它应该工作。
答案 0 :(得分:4)
可以轻松使用列表推导来删除不需要的项目,但考虑到嵌套的深度可能会有所不同,这是一种递归方式:
nest_list= [[('aa','1'),('bb','2')],[('cc','3'),('bb','4')],[('dd','5'),('dd','6')]]
def remove_items(lst, item):
r = []
for i in lst:
if isinstance(i, list):
r.append(remove_items(i, item))
elif item not in i:
r.append(i)
return r
>>> nest_list= [[('aa','1'),('bb','2')],[('cc','3'),('bb','4')],[('dd','5'),('dd','6')]]
>>> remove_items(nest_list, 'bb')
[[('aa', '1')], [('cc', '3')], [('dd', '5'), ('dd', '6')]]
>>> nest_list= [[[('aa','1'),('bb','2')],[('cc','3'),('bb','4')]],[('dd','5'),('dd','6')]]
>>> remove_items(nest_list, 'bb')
[[[('aa', '1')], [('cc', '3')]], [('dd', '5'), ('dd', '6')]]
答案 1 :(得分:1)
制作简单的功能。
def filter_bb(x):
return [(u,v) for (u,v) in x if u !='bb']
在列表理解中应用。
final_nest = [filter_bb(sub_list) for sub_list in nest_list]