【问题标题】:Remove tuple from nested list of tuples从嵌套的元组列表中删除元组
【发布时间】:2016-11-06 03:57:01
【问题描述】:

我有一个嵌套列表作为元组的嵌套列表,如下所示,

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 中是否有任何“递归方式”可以做到这一点,这样即使嵌套列表的深度也会发生变化。

【问题讨论】:

  • final_nest = [(u,v) for sub_list in nest_list for (u,v) in sub_list if u !='bb']
  • @alex 如果你打算在你的new question 中使用我的答案,如果你认为它有帮助,你可以考虑接受它

标签: python list nested tuples


【解决方案1】:

人们可以很容易地使用列表推导来删除不需要的项目,但考虑到嵌套的深度可能会有所不同,这是一种递归方式:

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')]]

【讨论】:

    【解决方案2】:

    制作简单的函数。

    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]
    

    【讨论】:

    • 这样即使嵌套列表的深度发生变化,它也应该起作用
    • 我知道。我不知道如何使它动态地适应不同的长度,你发布了你的解决方案。这就是我支持你的原因。
    猜你喜欢
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 2021-12-11
    • 2019-01-25
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多