关于python:迭代列表中不同长度的列表

Iterating through lists of different lengths which are inside a list

本问题已经有最佳答案,请猛点这里访问。

我有以下列表:

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

我想把所有的整数都取出来,用它们做一个字符串:

1
b = '1001010010100'

我有什么办法可以做到吗?提前谢谢!


下面是一个叛逆的方法:

1
2
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
2
3
4
5
6
7
8
9
10
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

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

1
2
3
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]

将其转换为字符串就足够直接了。

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


您正在寻找一个扁平函数:

1
2
3
4
5
def flatten_str(x):
    if isinstance(x, list):
        return"".join(flatten_str(a) for a in x)
    else:
        return str(x)


代码-

1
2
3
4
5
6
def solve(x):                                                        
    if isinstance(x, int):
        return str(x)
    return ''.join(solve(y) for y in x)

print(solve(a))

输出-

1
1001010010100