簡體   English   中英

如何展平深層嵌套元組?

[英]How do I Flatten Deeply Nested Tuples?

我給了一個元組的嵌套結構,每個元組有2個元素,並想將其轉換為平面結構

我試過使用*來遍歷和展平,但是由於每個元組嵌套在另一個元組中而被卡住了

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

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

使用遞歸

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

您可以將遞歸與生成器一起使用,以獲得更短,更簡潔的解決方案:

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)

機智:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM