如何在Python中展平嵌套序列

时间:2015-09-08 16:42:31

标签: python-2.7

我有一个嵌套序列,我希望将其压缩成单个值列表。

2 个答案:

答案 0 :(得分:1)

请尝试以下常规解决方案: 写一个涉及yield的递归生成函数 声明。例如:

from collections import Iterable
def flatten(items, ignore_types=(str, bytes)):
    for x in items:
        if isinstance(x, Iterable) and not isinstance(x, ignore_types):
            yield from flatten(x, ignore_types)
        else:
            yield x
items = [1, 2, [3, 4, [5, 6], 7], 8]
# Produces 1 2 3 4 5 6 7 8
for x in flatten(items):
    print(x)

答案 1 :(得分:0)

我接受递归但是以平衡的方式分开。

def flatten(lst):
    n = len(lst)
    if n == 0:
        return lst
    elif n == 1:
        item = lst[0]
        try:
            return flatten(list(item))
        except TypeError:
            return [item]
    else:
        k = n // 2
        return flatten(lst[:k]) + flatten(lst[k:])

演示

items = [1, 2, [3, 4, [5, 6], 7], 8]

flatten(items)

[1, 2, 3, 4, 5, 6, 7, 8]