【问题标题】:What's the best way to Remove Entries From Lists inside of Lists?从列表内部的列表中删除条目的最佳方法是什么?
【发布时间】:2022-11-30 05:56:05
【问题描述】:

我想使用一个列表从另一个列表中删除条目,这本身在一个级别上并不难。但是我在使用列表中的列表(多个级别)时遇到问题

list1 = [['orange', 'apple'], ['stone', 'wood', ['stone', 'stone', 'raven']]]

exclusionList = ["stone"]

我想要的结果:


>>> [['orange', 'apple'], ['wood', ['raven']]]

该解决方案应该能够动态调整列表级别的数量。

【问题讨论】:

    标签: python list recursion


    【解决方案1】:

    这似乎会承认递归解决方案。首先,这是您可能拥有的普通“一级”(平面)列表。

    #there's better ways to implement this function specifically
    def remove_items(main_list, blacklist):
        for item in blacklist:
            if item in main_list:
                main_list.remove(item)
    

    解决方案是将它递归地应用于您的列表及其每个元素。

    def remove_items_nested(main_list, blacklist):
        remove_items(main_list, blacklist)
        for sublist in main_list:
            if not isinstance(sublist, list): continue
            remove_items_nested(sublist, blacklist)
    

    【讨论】:

    • 就像你知道的那样,递归方法不会检查列表中是否有多个相同的项目,如果一个列表有 2 个或更多相同的值,它只会删除第一个值,然后跳转到下一个列表
    【解决方案2】:

    递归方法:

    list1 = [['orange', 'apple'], ['stone', 'wood', ['stone', 'stone', 'raven']]]
    
    exclusionList = ["stone"]
    
    
    def remove(lst, exclusion):
        result = []
        for e in lst:
            if isinstance(e, list):
                result.append(remove(e, exclusion))
            elif e not in exclusion:
                result.append(e)
        return result
    
    
    res = remove(list1, exclusionList)
    print(res)
    

    输出

    [['orange', 'apple'], ['wood', ['raven']]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 2020-08-07
      相关资源
      最近更新 更多