如何展平深层嵌套元组?

时间:2019-04-03 13:25:32

标签: python tuples

我给了一个元组的嵌套结构,每个元组有2个元素,并想将其转换为平面结构

我尝试使用*进行循环和展平,但是由于每个元组嵌套在另一个元组中而被卡住了

示例输入:(((((1, 2), 3), 4), 5), 6)

示例输出:(1, 2, 3, 4, 5, 6)

3 个答案:

答案 0 :(得分:2)

使用递归

def convert(data):
    result = []
    for item in data:
        if isinstance(item, tuple):
            result.extend(convert(item))
        else:
            result.append(item)
    return tuple(result)

data = (((((1, 2), 3), 4), 5), 6)
print(convert(data))

答案 1 :(得分:1)

您可以将递归与生成器一起使用,以实现更短,更简洁的解决方案:

def flatten(d):
  for i in d:
     yield from [i] if not isinstance(i, tuple) else flatten(i)

print(tuple(flatten((((((1, 2), 3), 4), 5), 6))))

输出:

(1, 2, 3, 4, 5, 6)

答案 2 :(得分:0)

机智:

def flatten(T):
    if T == ():
       return T
    if isinstance(T[0], tuple):
       return flatten(T[0]) + flatten(T[1:])
    return T[:1] + flatten(T[1:])


s = (((((1, 2), 3), 4), 5), 6)
print("Flattened tuple: ", flatten(s))    

输出

Flattened tuple:  (1, 2, 3, 4, 5, 6)