迭代列表中不同长度的列表

时间:2016-05-20 15:52:00

标签: python list

我有以下列表:

a = [[1, [0], [0], [1, [0]]], [1, [0], [0], [1, [0]]], [1, [0], [0]]]

我想取所有整数并用它们创建一个字符串:

b = '1001010010100'

我有什么方法可以做到这一点? 提前谢谢!

4 个答案:

答案 0 :(得分:8)

这是一种反叛的方法:

a = [[1, [0], [0], [1, [0]]], [1, [0], [0], [1, [0]]], [1, [0], [0]]]
b = ''.join(c for c in str(a) if c.isdigit())

答案 1 :(得分:4)

您可以编写一个递归遍历嵌套列表的函数,并尝试将每个元素转换为迭代器。

def recurse_iter(it):
    if isinstance(it, basestring):
        yield it
    else:
        try:
            for element in iter(it):
                for subelement in recurse_iter(element):
                    yield subelement
        except TypeError:
            yield it

这个可怕的函数将生成一个对象中的字符串和不可迭代成员的列表。

a = [[1, [0], [0], [1, [0]]], [1, [0], [0], [1, [0]]], [1, [0], [0]]]
list(recurse_iter(a))
# [1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0]

将此转换为字符串非常简单。

''.join(map(str, recurse_iter(a)))

答案 2 :(得分:1)

代码 -

def solve(x):                                                        
    if isinstance(x, int):
        return str(x)
    return ''.join(solve(y) for y in x)

print(solve(a))

输出 -

1001010010100

答案 3 :(得分:1)

您正在寻找flatten功能:

def flatten_str(x):
    if isinstance(x, list):
        return "".join(flatten_str(a) for a in x)
    else:
        return str(x)