繁体   English   中英

如何在 Python 3 中过滤多维列表?

[英]How to filter multi-dimensional list in Python 3?

我有清单:

[1,4,4,2,[[[4],5]],5,6]

我如何过滤这个列表,我将有唯一的值,但保存元素的尺寸?

结果:

[1,4,2,[[5]],6]

您可以使用递归函数,它的工作方式与您可能在网上找到的任何其他唯一查找解决方案一样,但是当它遇到一个内部列表时,它会用这个内部列表调用自己(仅从中获取唯一值),同时将集合作为参数传递已经看到的元素(因此“独特之处”被定义为全新的元素)。

尝试这个:

lst = [1, 4, 4, 2, [[[4], 5]], 5, 6]


def unique(lst, already_seen):
    result = []
    for item in lst:
        if isinstance(item, list):
            inner_uniques = unique(item, already_seen)
            if len(inner_uniques) > 0:
                result.append(inner_uniques)
        else:  # assuming item is a number
            if item in already_seen:
                continue
            else:  # new number
                result.append(item)
                already_seen.add(item)
    return result


result = unique(lst, set())  # starting with an empty ser
print(result)

输出:

[1, 4, 2, [[5]], 6]

这是一个修改原始列表而不是创建新列表的版本(并返回它,这不是 Pythonic 但可能很有用):

def remDups( s, seen=set() ):
    to_pop = []
    for i,v in enumerate(s):
        if isinstance(v,list):
            remDups( v, seen )
        elif v in seen:
            to_pop = [i]+to_pop
        else:
            seen.add(v)
    for i in to_pop:
        s.pop(i)
    return s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM