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 |
号