如何将具有可变长度的列表列表展平为单个列表?蟒蛇

时间:2012-05-15 00:14:13

标签: python list flatten sublist

我刚才问过如何在这里给出分隔符的字符串中制作一个子列表(以及更多的子列表)列表。 How to process a string into layer of sublists

现在,我需要加入他们,我不知道如何。我试着看看这里 Python : Recursively flatten a listFlatten a list in python

但是,这些答案都不适用于我的情况,因为链将我的字符串(单项“列表”)拆分为字符,因此不能与“\ n”连接,而reduce不会连接str和list对象。< / p>

我可能需要在某些时候浏览子列表(及其子列表)。有没有办法迭代每个子级列表? (我可以把它作为一个单独的问题,一步一步......但只是想知道这个过程是否有意义,还是我应该尝试一个全新的方法。我认为逻辑上这是最有意义的,我只是有导航它的麻烦。)

感谢。

1 个答案:

答案 0 :(得分:3)

除非你另有说法,否则我会假设我在评论中说的是正确的。

从您关联的帖子中,您有:

import collections

def flatten(l):
    for el in l:
        if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
            for sub in flatten(el):
                yield sub
        else:
            yield el

recursively flatten an irregular list of lists

def go(it):
    for x in it:
        if x == 'b':
            yield [x] + list(go(it))
        else:
            yield x
            if x == 'c':
                break

create that irregular list of lists from an iterator

go的倒数仅为flatten(output_of_go),因此go(iter(string))的倒数为''.join(flatten(output_of_go))。你可以看到这个测试代码:

lst = "aaabaabacabaacaca"
assert ''.join(flatten(go(iter(lst)))) == lst