假设我有一个像
这样的数据集(1, 2, (3, 4), (5, 6), (7, 8, (9, 0)))
我想将其转换为(半)平面表示,例如
(
(1, 2),
(1, 2, 3, 4),
(1, 2, 5, 6),
(1, 2, 7, 8),
(1, 2, 7, 8, 9, 0),
)
如果你使用它,(取自SO)
def flatten(iterable):
for i, item in enumerate(iterable):
if hasattr(item, '__iter__'):
for nested in flatten(item):
yield nested
else:
yield item
这将把它转换为像(迭代之后)
之类的列表[1, 2, 3, 4, 5, 6, 7, 8, 9]
但我无法从这次重复发现获得原始版本,而我可以从第一次获得原始版本。 (如果每个元组只有2个元素)
答案 0 :(得分:2)
这将给出示例输出。不知道这是否真的是表达你想要的模型的最佳方式,但是......
def combineflatten(seq):
items= tuple(item for item in seq if not isinstance(item, tuple))
yield items
for item in seq:
if isinstance(item, tuple):
for yielded in combineflatten(item):
yield items+yielded
>>> tuple(combineflatten((1, 2, (3, 4), (5, 6), (7, 8, (9, 0)))))
((1, 2), (1, 2, 3, 4), (1, 2, 5, 6), (1, 2, 7, 8), (1, 2, 7, 8, 9, 0))
答案 1 :(得分:0)
如何使用不同的“平面”表示,可以转换回来:
[1, 2, '(', 3, 4, ')', '(', 5, 6, ')', '(', 7, 8, '(', 9, 0, ')', ')']