recursive function for extract elements from deep nested lists/tuples

后端 未结 4 656
后悔当初
后悔当初 2021-01-21 18:07

I want to write a function that extracts elements from deep nested tuples and lists, say I have something like this

l = (\'THIS\', [(\'THAT\', [\'a\', \'b\']),          


        
4条回答
  •  野性不改
    2021-01-21 18:36

    Assuming that the first element of each tuple can be disregarded, and we should recurse with list that is the second element, we can do this:

    def extract(node):
        if isinstance(node, tuple):
            return extract(node[1])
        if isinstance(node, list):
            return [item for sublist in [extract(elem) for elem in node] for item in sublist]
        return node
    

    The list comprehension is a little dense, here's the same with loops:

    def extract(node):
        if isinstance(node, tuple):
            return extract(node[1])
        if isinstance(node, list):
            result = []
            for item in node:
                for sublist in extract(item):
                    for elem in sublist:
                        result.append(elem)
            return result
        return node
    

提交回复
热议问题